Remplacer les cellules vides par des 0 logiques avant cell2mat dans MATLAB

j'ai un tableau de cellules vides et celles que je veux convertir en un ensemble logique, où les cellules vides sont des zéros. Lorsque j'utilise cell2mat, les cellules vides sont ignorées, et je me retrouve avec une matrice de uniquement de 1, sans référence à l'indice précédent. Est-il un moyen pour effectuer cette opération sans l'aide de boucles?

exemple de code:

for n=1:5              %generate sample cell array
    mycellarray{n}=1;
end
mycellarray{2}=[]      %remove one value for testing

Choses que j'ai essayé:

mylogicalarray=logical(cell2mat(mycellarray));

qui résulte en [1,1,1,1], Non [1,0,1,1,1].

for n=1:length(mycellarray)
    if isempty(mycellarray{n})
       mycellarray{n}=0;
    end
end
mylogicalarray=logical(cell2mat(mycellarray));

qui fonctionne, mais utilise des boucles.

17
demandé sur niton 2010-04-12 21:29:30

2 réponses

Si vous savez que votre tableau de cellule est va contenir et [] (qui représentent vos zéros), vous pouvez simplement utiliser la fonction CELLFUN pour obtenir un index logique des cellules vides, puis de nier l'indice de vecteur:

mylogicalarray = ~cellfun(@isempty,mycellarray);

Si vos cellules contiennent toujours des valeurs zéro (pas juste []), vous pouvez remplacer les cellules vides de 0, en utilisant d'abord la fonction CELLFUN pour trouver un indice pour le vide cellules:

emptyIndex = cellfun(@isempty,mycellarray);       %# Find indices of empty cells
mycellarray(emptyIndex) = {0};                    %# Fill empty cells with 0
mylogicalarray = logical(cell2mat(mycellarray));  %# Convert the cell array
27
répondu gnovice 2010-04-12 17:48:23
mycellarray( cellfun(@isempty, mycellarray) ) = {0};
mylogicalarray = logical(cell2mat(mycellarray));
6
répondu Amro 2010-04-12 18:18:10