Si vous souhaitez simplement supprimer les zéros, en laissant les non-nuls derrière dans a, alors la meilleure solution est
a(a==0) = [];
Cela supprime les éléments zéro, en utilisant une approche d'indexation logique en MATLAB. Lorsque l'indice d'un vecteur est un vecteur booléen de la même longueur que le vecteur, MATLAB peut l'utiliser pour l'indexer. C'est donc équivalent à
a(find(a==0)) = [];
Et, lorsque vous définissez certains éléments du tableau sur [] en MATLAB, la convention est de les supprimer.
Si vous souhaitez mettre les zéros dans un nouveau résultat b, tout en laissant a inchangé, la meilleure façon est probablement
b = a(a ~= 0);
Encore une fois, l'indexation logique est utilisée ici. Vous auriez pu utiliser la version équivalente (en termes de résultat) de
b = a(find(a ~= 0));
mais mlint finira par signaler la ligne comme étant plus efficace en termes d'indexation purement logique, et donc plus appropriée.
Comme toujours, méfiez-vous des tests EXACTS pour zéro ou pour tout nombre, si vous auriez accepté des éléments de a qui étaient dans une tolérance epsilon de zéro. Faites ces tests comme ceci
b = a(abs(a) >= tol);
Cela ne conserve que les éléments de a qui sont au moins aussi grands que votre tolérance.