Accessing multiple columns in cell array

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

回答(3 个)

KSSV
KSSV 2021-6-9
编辑:KSSV 2021-6-9
A = cat(3,Data{:}) ; % convert cell array to 3D matrix
m = cell2mat(mean(A(:,end,:))) % mean of last column
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

类别

帮助中心File Exchange 中查找有关 Logical 的更多信息

产品

版本

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by