Array Indexing using logicals in higher dimensions
13 次查看(过去 30 天)
显示 更早的评论
I have a 3D array: A = 10x10x100 where the 2D data (10x10) is stacked in the 3rd dimension.
I am using a logical mask: B which is 10x10 and has 1s at the locations where I want to access the data in every 2D slice of the 3D array.
I would like to use the logical mask to access the data from each 2D slice and perform some simple operations - such as compute mean - for all slices (in the 3rd dimension). I am currently using a for loop as below.
for i = 1:size(A,3)
temp = A(:,:,i);
mean_out(i) = mean(temp(B));
end
Is it possible to achieve this without a for loop?
Thanks.
0 个评论
采纳的回答
Ameer Hamza
2020-5-20
编辑:Ameer Hamza
2020-5-20
Try this
mean_val = squeeze(mean(A.*B, [1 2]))
Similarly
squeeze(max(A.*B, [], [1 2])) % maximum value
squeeze(min(A.*B, [], [1 2])) % minimum value
4 个评论
Ameer Hamza
2020-5-20
In that case try
A = rand(10,10,100);
B = rand(10,10)>0.5;
mask = repmat(B, 1, 1, size(A,3));
M = A;
M(mask) = nan;
mean_val = nanmean(M, [1 2])
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!