Array Indexing using logicals in higher dimensions
5 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Ameer Hamza
on 20 May 2020
Edited: Ameer Hamza
on 20 May 2020
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 Comments
Ameer Hamza
on 20 May 2020
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])
More Answers (0)
See Also
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!