2012-01-01 17 views
8

En una matriz, para eliminar las columnas en las que el elemento de la primera línea es 0, podemos utilizar:elementos de una célula Eliminación en Matlab

ind2remove = (A(1,:) == 0); 
A(:,ind2remove) = []; 

¿Cómo hago que si A es una célula ? Quiero eliminar las columnas en las que el elemento de la primera fila es 0.

Traté:

ind2remove = (A{1,:} == 0); 
A{:,ind2remove} = []; 

pero me dio el mensaje de error:

??? Error using ==> eq 
Too many input arguments. 

Error in ==> ind2remove = (A{1,:} == 0); 
+0

Una celda puede contener diferentes tipos de datos. ¿Cómo se ve tu celular? ¿Tiene solo un elemento (numérico) en cada celda? La respuesta es simple, pero me gustaría tener un ejemplo de datos. – abcd

+0

@yoda: la primera fila de la celda A contiene valores numéricos, y la segunda línea contiene las matrices – bzak

Respuesta

10

de indexación utilizando { } le da contenidos de la celda, mientras que la indexación usando () devuelve el mismo tipo que el objeto original, es decir, si A es una celda, A{i,j} devolverá lo que es sosteniendo, y A(i,j) siempre devolverá una celda. Necesitas lo último.

Por lo tanto, en su caso, puede hacer lo siguiente para eliminar todas las columnas donde la primera fila tiene un 0.

A(:, cellfun(@(x)x==0, A(1,:))) = []; 

El supuesto aquí es que cada celda de la primera fila contiene un solo elemento numérico, como por su comentario.

+0

muchas gracias. – bzak

Cuestiones relacionadas