Hi,
I need to calculate the mean of 5 measurements. The 5 measurements are presented in a 5*1 cell array. The variable is called Data.
Thus, I need the mean of:
Data{1, 1}(:,end)
Data{2, 1}(:,end)
Data{3, 1}(:,end)
Data{4, 1}(:,end)
Data{5, 1}(:,end)
How do I acces all 5 columns at once?
Thanks in advance.
-Lasse

Réponses (3)

KSSV
KSSV le 9 Juin 2021
Modifié(e) : KSSV le 9 Juin 2021
A = cat(3,Data{:}) ; % convert cell array to 3D matrix
m = cell2mat(mean(A(:,end,:))) % mean of last column
Scott MacKenzie
Scott MacKenzie le 9 Juin 2021
Modifié(e) : Scott MacKenzie le 9 Juin 2021
You need to retrieve the elements in their underlying data type (hence the use of braces) and concatenate the values using brackets:
mean([Data{:,1}])
If indeed thare are only 5 values (measurements), then you don't need ",1". Just use
mean([Data{:}])
Have a look here for a summary of the ways to access data in a cell array. Good luck.
Fake data:
Data = arrayfun(@(n)randi(9,2,3),1:5,'uni',0).'; % fake data
Data{:}
ans = 2×3
2 5 6 6 5 4
ans = 2×3
9 3 5 1 3 5
ans = 2×3
3 1 9 8 5 2
ans = 2×3
5 6 6 2 4 1
ans = 2×3
2 7 2 1 7 5
Method one:
M = mean(cat(3,Data{:}),3);
M = M(:,end)
M = 2×1
5.6000 3.4000
Method two:
M = mean(cell2mat(reshape(Data,1,1,[])),3);
M = M(:,end)
M = 2×1
5.6000 3.4000
Method three:
M = mean(cell2mat(cellfun(@(m)m(:,end),Data.','uni',0)),2)
M = 2×1
5.6000 3.4000
Method four:
M = mean(cell2mat(arrayfun(@(n)Data{n}(:,end),1:numel(Data),'uni',0)),2)
M = 2×1
5.6000 3.4000

Catégories

En savoir plus sur MATLAB dans Centre d'aide et File Exchange

Produits

Version

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by