For loop through cell arrays
조회 수: 91 (최근 30일)
이전 댓글 표시
I have a 1×4 cell array of
{60×4 double} {60×4 double} {60×4 double} {60×4 double}
and I need to;
-find the values at the 3rd column at the rows have "20" at the first column in each cell
-then eliminate zeros if there is any
-then take average
As an illustration
10 NaN 0 NaN 20 NaN 623 1
10 NaN 0 NaN 20 NaN 0 NaN
20 NaN 310 1 10 NaN 38 1
20 NaN 0 NaN 10 NaN 0 NaN
20 NaN 1445 1 10 NaN 0 NaN
the first cell should give the average of 310 and 1445, whereas the second cell should give 623.
I am thinking of a for loop but I couldnt make it work. Thanks in advance!
댓글 수: 3
채택된 답변
Adam Danz
2020년 6월 24일
편집: Adam Danz
2020년 6월 25일
If you want to do this in a loop, there are 4 steps I've outlined below.
"c" is the 1x4 cell array.
column3Means = nan(size(c));
for i = 1:numel(c)
% Find rows where column 1 equals 20
index1 = c{i}(:,1) == 20;
% Find rows where column 3 is not 0
index2 = c{i}(:,3) ~= 0;
% Combine those indices
idx = index1 & index2;
% Use the combined index to compute the mean
column3Means(i) = mean(c{i}(idx,3),'omitnan');
end
FYI, the loop can be avoided using the cellfun() function.
댓글 수: 10
Adam Danz
2020년 6월 25일
Glad it worked out.
The take-home message is: learn/use indexing.
Indexing is a superpower of Matlab. My answer uses logical indexing but there are other types of indexing as well.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!