Accessing multiple columns in cell array

16 vues (au cours des 30 derniers jours)
Lasse Jakobsen
Lasse Jakobsen le 9 Juin 2021
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.

Stephen23
Stephen23 le 9 Juin 2021
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 Matrices and Arrays dans Help Center 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