Remplacer les cellules vides avec un 0 logique est 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 à la précédente, de l'indice qu'ils détenaient. 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ésultats dans [1,1,1,1], pas [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 qui utilise des boucles.
Vous devez vous connecter pour publier un commentaire.
Si vous savez que votre tableau de cellule est seulement va contenir et
[]
(qui représentent vos zéros), vous pouvez simplement utiliser la fonctioncellfun
pour obtenir un index logique des cellules vides, puis de nier l'indice de vecteur:Si vos cellules pourrait encore contenir des valeurs nulles (pas seulement
[]
), vous pouvez remplacer les cellules vides de 0, en utilisant d'abord la fonctioncellfun
de trouver un indice pour les cellules vides:cellfun('isempty',mycellarray)
est beaucoup plus rapide que la fonction de poignée;isempty()
est l'un de plusieurs fonctions en profitant de la vitesse massif augmente quand explicitement nommée dans lacellfun()
appel.~
en face decellfun
?~
est l'opérateur logique non.