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

9 vues (au cours des 30 derniers jours)
George Papas
George Papas le 12 Sep 2016
Commenté : George Papas le 12 Sep 2016
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.
  1 commentaire
Stephen23
Stephen23 le 12 Sep 2016
See Guillaume's answer for a much simpler solution.

Connectez-vous pour commenter.

Réponse acceptée

KSSV
KSSV le 12 Sep 2016
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 commentaires
Stephen23
Stephen23 le 12 Sep 2016
Modifié(e) : Stephen23 le 12 Sep 2016
There is no point in using a loop to solve this task. See Guillaume's answer for a much simpler solution.
George Papas
George Papas le 12 Sep 2016
Thanks Stephen.

Connectez-vous pour commenter.

Plus de réponses (1)

Guillaume
Guillaume le 12 Sep 2016
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 commentaire
George Papas
George Papas le 12 Sep 2016
Thank you Guillaume, that's true. It works very well and it is really concise indeed!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Multidimensional Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by