2012-01-04 3 views

Répondre

1

Je l'ai utilisé une combinaison de CELLFUN, CELL2MAT et UNIQUE. L'idée est de convertir chaque matrice en un vecteur, de convertir ce tableau de cellules en une matrice et d'appliquer un résultat unique, Le résultat que vous pouvez convertir en tableau de cellules avec NUM2CELL.

x = {[1 2; 3 4], [1 2; 3 4], [5 6; 7 8], [1 2; 3 4], [5 6; 7 8]}'; 
x1 = cellfun(@(y)y(:)', x, 'UniformOutput',0); 
x2 = cell2mat(x1); 
x3 = unique(x2,'rows'); 
x4 = num2cell(x3,2); 
x5 = cellfun(@(y) reshape(y,2,2), x4, 'UniformOutput',0); 

Probablement, cela peut être fait avec moins d'étapes.

Il est important de se rappeler que ce code ne fonctionnera que si tous les éléments de la cellule ont la même taille.

Vous pouvez vérifier cette condition avec

assert(size(unique(cell2mat(cellfun(@size,x,'UniformOutput',0))),1) == 1,... 
     'Cell elements have different size') 
+0

Même si cela peut être fait, je ne vois aucune raison de ne pas quitter le code tel quel. C'est plus compréhensible de cette façon –

+0

Super, merci beaucoup pour cela. –

Questions connexes