Если вы просто хотите удалить нули, оставив ненулевые в a, то самое лучшее решение -
a(a==0) = [];
При этом удаляются нулевые элементы с использованием подхода логической индексации в MATLAB. Если индекс для вектора является логическим вектором такой же длины, что и вектор, тогда MATLAB может использовать этот логический результат для индексации. Так что это эквивалентно
a(find(a==0)) = [];
И, когда вы устанавливаете для некоторых элементов массива значение [] в MATLAB, существует соглашение об их удалении.
Если вы хотите поместить нули в новый результат b, оставив без изменений, лучший способ, вероятно, будет
b = a(a ~= 0);
Опять же, здесь используется логическая индексация. Вы могли бы использовать эквивалентную версию (с точки зрения результата)
b = a(find(a ~= 0));
но mlint в итоге помечает строку как строку, в которой чисто логический индекс был более эффективным и, следовательно, более подходящим.
Как всегда, остерегайтесь точных тестов для нуля или для любого числа, если бы вы приняли элементы a, которые находились в пределах некоторого эпсилонического допуска на ноль. Сделайте эти тесты, как это
b = a(abs(a) >= tol);
При этом сохраняются только те элементы a, которые по крайней мере равны вашему допуску.