Extract 3D cells with nonzero elements, from a 3D cell array.

Hi guys! I have binary masks saved in 3D arrays (e.g. Mask(:,:,40), see attached Matlab file) and I want to extract only the 3D cell arrays which contain nonzero elements in a sequential order (e.g. if these are 20, then NMask(:,:,20)). Any ideas would be much appreciated.

 采纳的回答

clc; clear all ;
load Mask.mat ;
k = Combinedmask ;
[m,n,p] = size(k) ;
count = 0 ;
for i = 1:p
ki = k(:,:,i) ;
if sum(any(ki))~=0
count = count+1 ;
iwant{count} = ki ;
end
end

3 个评论

That's brilliant, nice and concise Siva, great thanks!
There is no point in using a loop to solve this task. See Guillaume's answer for a much simpler solution.

请先登录,再进行评论。

更多回答(1 个)

Well, if you want nice and concise:
filteredmask = Combinedmask(:, :, any(any(Combinedmask, 1), 2))
No need for cell arrays, loops, ifs, etc., just one line.

1 个评论

Thank you Guillaume, that's true. It works very well and it is really concise indeed!

请先登录,再进行评论。

类别

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

Community Treasure Hunt

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

Start Hunting!

Translated by