Si sólo desea eliminar los ceros, dejando a los no-ceros detrás de una, entonces la mejor solución es
a(a==0) = [];
Esto elimina los elementos cero, usando un enfoque de indexación lógica en MATLAB. Cuando el índice de un vector es un vector booleano de la misma longitud que el vector, MATLAB puede usar ese resultado booleano para indexarlo. Así que esto es equivalente a
a(find(a==0)) = [];
Y, al configurar algunos elementos de la matriz a [] en MATLAB, la convención es para eliminarlos.
Si usted quiere poner los ceros en un nuevo resultado b, dejando un sin cambios, la mejor manera es probablemente
b = a(a ~= 0);
Una vez más, la indexación lógica se utiliza aquí. Se podría haber utilizado la versión equivalente (en términos de resultado) de
b = a(find(a ~= 0));
pero mlint el resultado final será marcar la línea como uno en el que el índice puramente lógico era más eficiente, y por lo tanto más apropiado.
Como siempre, tenga en cuenta EXACT pruebas para cero o para cualquier número, si hubiera aceptado elementos de a que estuvieran dentro de una tolerancia épsilonica de cero. Haga esas pruebas como
b = a(abs(a) >= tol);
Esto conserva solo aquellos elementos que son al menos tan grandes como su tolerancia.
o para el primer ejemplo, 'a = a (a ~ = 0)' es suficiente, la asignación en contexto funciona bien. Buen punto para probar contra un número pequeño en lugar de 0. – mtrw
@woodchips: Acabo de publicar una comparativa de rendimiento a continuación :) – tim