2012-07-12 25 views
11

Tengo un vector lógico 1D, una matriz de celdas y un valor de cadena que quiero asignar.Asignar un valor a varias celdas en matlab

me trataron "célula lógica {} = cadena" pero me sale el siguiente error:

The right hand side of this assignment has too few values to satisfy 
the left hand side. 

¿Tiene la solución?

Respuesta

17

En realidad, no necesita utilizar deal.

a = cell(10,1); % cell array 
b = rand(1,10)>0.5; % vector with logicals 
myString = 'hello'; % string 

a(b) = {myString}; 

En cuanto a la última línea: en el lado izquierdo estamos seleccionando un subconjunto de células de a y diciendo que todos ellos deben ser igual a la celda en el lado derecho, que es una célula que contiene una cadena.

+0

¡Perfecto! Gracias por publicar esto. Esto es mucho más sencillo que usar 'deal', pero de alguna manera nunca aprendí que era necesario hacer el lado derecho en una matriz de células antes de hacer la tarea. – zroth

+0

Usted gana la respuesta correcta para una mayor simplicidad;) (un año después) –

13

Puede probar este

a = cell(10,1); % cell array 
b = rand(1,10)>0.5; % vector with logicals 
myString = 'hello'; % string 

[a{b}] = deal(myString); 

el resultado es:

a = 

    'hello' 
     [] 
     [] 
    'hello' 
    'hello' 
     [] 
    'hello' 
    'hello' 
     [] 
     [] 
+1

¡Agradable! Fue imposible encontrarlo en Internet ... ¿Puedes explicar por qué []? –

7

Como dijo H.Muster, deal es el camino a seguir aquí. El motivo de los corchetes es que (siguiendo la configuración de H.Muster) a{b} devuelve una lista separada por comas; los corchetes deben colocarse alrededor de esta lista para concatenarlo en un vector. Correr help lists en Matlab podría aclarar aún más, como lo haría la documentación sobre comma-separated lists

Editar: El answer proporcionada por user2000747 parece mucho más limpio que el uso de deal.

1

Otra solución puede ser

a = cell(10,1); 
a([1,3]) = {[1,3,6,10]} 

Esto puede parecer ser un complemento innecesario, pero decir que usted quiere asignar un vector de 3 células en una matriz celular 1D de longitud 1E8. Si se utiliza una lógica, esto requeriría la creación de una matriz lógica de tamaño de casi 100Mb.

Cuestiones relacionadas