2010-04-29 5 views
8

Possible Duplicate:
How do I do multiple assignment in MATLAB?Esiste qualcosa come deal() per i normali array MATLAB?

Quando si tratta di matrici di celle, posso utilizzare la funzione deal() per assegnare cellule alle variabili di uscita, come:

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

o semplicemente:

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

desidero fare la stessa cosa per un semplice array, come ad esempio:

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

Ma questo non funziona. Qual è l'alternativa?

+4

ho pensato a questa domanda suonava familiare, ma ci ho messo un po 'di tempo per trovare il duplicato: http://stackoverflow.com/questions/2337126/multiple-assignment- in-mATLAB. Penso che proverò a taggare meglio queste domande quando avrò la possibilità. – gnovice

risposta

9

Una possibilità è quella di convertire l'array a un array di celle a usare NUM2CELL:

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

Come si nota, che non hanno nemmeno bisogno di usare DEAL per distribuire il contenuto della cella.

+1

Non è un one-liner? '[a, b, c] = num2cell (myArray) {:}' – mtrw

+0

@mtrw: No, questo genera questo errore: '??? Errore:() -indexing deve apparire per ultimo in un'espressione dell'indice. – gnovice

+1

Oh interessante. Funziona in Octave. Immagino che la versione FOSS non possa permettersi di acquistare una variabile temporanea. – mtrw

0

Non è molto elegante, ma:

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

In realtà, gratta che, la chiamata 'arrayfun' fondamentalmente fa la stessa cosa di' num2cell'. –

+1

Ecco un trucco per le chiamate short array/cell/Xfun: invece di 'UniformOutput', false, puoi semplicemente fare in modo che la funzione anonima restituisca una cella. c = arrayfun (@ (x) {x}, myArray) –