2010-04-29 15 views
8

Possible Duplicate:
How do I do multiple assignment in MATLAB?¿Hay algo como deal() para matrices MATLAB normales?

Cuando se trata de paneles de células, que puede utilizar la función deal() asignar células a las variables de salida, tales como:

[a, b, c] = deal(myCell{:}); 

o simplemente:

[a, b, c] = myCell{:}; 

me gustaría Haga lo mismo para una matriz simple, como:

myArray = [1, 2, 3]; 
[a, b, c] = deal(myArray(:)); 

Pero esto no funciona. ¿Cuál es la alternativa?

+4

pensé que esta pregunta le resultaba familiar, pero me tomó un tiempo para encontrar el duplicado: http://stackoverflow.com/questions/2337126/multiple-assignment- in-matlab. Creo que intentaré etiquetar estas preguntas mejor cuando tenga oportunidad. – gnovice

Respuesta

9

Una opción es convertir la matriz a una matriz de células usando primero NUM2CELL:

myArray = [1, 2, 3]; 
cArray = num2cell(myArray); 
[a, b, c] = cArray{:}; 

Como usted señala, que ni siquiera es necesario utilizar DEAL para distribuir los contenidos de la celda.

+1

¿No es esto de una sola línea? '[a, b, c] = num2cell (myArray) {:}' – mtrw

+0

@mtrw: No, eso arroja este error: '??? Error:() -indexing debe aparecer último en una expresión de índice. – gnovice

+1

Oh interesante. Funciona en Octave. Supongo que la versión de FOSS no puede permitirse comprar una variable de temperatura. – mtrw

0

No muy bonita, pero:

myArray = 1:3; 
c = arrayfun(@(x) x, myArray , 'UniformOutput', false); 
c{:} 
+1

En realidad, rayar eso, la llamada 'arrayfun' básicamente hace lo mismo que' num2cell'. –

+1

Este es un truco para llamadas de array/cell/Xfun más cortas: en lugar de 'UniformOutput', falso, puede hacer que su función anónima devuelva una celda. c = arrayfun (@ (x) {x}, myArray) –

Cuestiones relacionadas