2013-03-15 5 views
1

J'ai une matrice de matrice de dimension 1xN contenant des matrices de dimension AxB, où A> 0 et B> 2. Je veux extraire les deuxième et troisième colonnes de chaque matrice et créer une nouvelle cellule -array contenant ces nouvelles matrices.Vectorisation de la manipulation d'éléments de matrice de cellules

Je sais que je peux le faire:

newcell = cell(size(oldcell)); 
for i = 1:size(oldcell,2) 
    newcell{i} = oldcell{i}(:, [2, 3]); 
endfor 

Mais je me demande si la boucle peut être évité en vectorisation plus loin?

Répondre

1

Je l'ai compris. Cela peut être fait avec cellfun(), avec l'option UniformOutput définie sur false (la valeur par défaut est true).

newcell = cellfun(@(x) x(:, [2, 3]), oldcell, 'UniformOutput', false); 

La raison pour laquelle cela ne fonctionne pas avec UniformOutput = true est que cellfun() attend alors les sorties à être scalaire, qu'ils ne sont pas dans ce cas.

Questions connexes