2010-05-05 20 views
8

Ehi, ho un po 'di problemi. Cercando di assegnare una lunghezza variabile di array 1d a diversi valori di un array, ad es."Array of array" in MATLAB?

a(1) = [1, 0.13,0.52,0.3]; 
a(2) = [1, 0, .268]; 

Tuttavia, ottengo l'errore:

??? In an assignment A(I) = B, the number of elements in B and 
I must be the same. 

Error in ==> lab2 at 15 
a(1) = [1, 0.13,0.52,0.3]; 

Presumo che questo significa che è in attesa di un valore scalare invece di un array. Qualcuno sa come assegnare la matrice a questo valore?

Preferirei non definisco direttamente come una matrice 2D come lo è per stanno facendo le soluzioni ai diversi problemi in un ciclo

Edit: Ci sono!

a (1,1: 4) = [1, 0,13,0,52,0,3];

a (2,1: 3) = [1, 0, .268];

+0

avete preallocato un? Se sì, come? –

+0

non l'ho preassegnato, non pensavo di aver bisogno di – bcoughlan

+0

Per quanto ne so, questo non può essere fatto con gli array. Se si desidera memorizzare una matrice in un unico indirizzo, provare la cella o struct i tipi di dati. Se posso chiedere specificamente, cosa ti impedisce di usare un array 2D? –

risposta

13

Ciò che probabilmente si voleva dare era

a(1,:) = [1, 0.13,0.52,0.3]; 
a(2,:) = [1, 0, .268]; 

cioè la prima fila è [1, 0.13,0.52,0.3] e la seconda fila è [1, 0, .268]. Questo non è possibile, perché quale sarebbe il valore di a (2,4)?

Esistono due modi per risolvere il problema.

(1) array di celle Utilizzare

a{1} = [1, 0.13,0.52,0.3]; 
a{2} = [1, 0, .268]; 

(2) Se si conosce il numero massimo possibile di colonne vostre soluzioni avranno, è possibile preallocare l'array, e scrivere nei risultati come così (se non preallocare, si ottenere il riempimento di zeri. È anche rischiare di rallentare il ciclo molto, se ci sono molte iterazioni, perché la matrice dovrà essere ricreato ad ogni iterazione.

a = NaN(nIterations,maxNumCols); %# this fills the array with not-a-numbers 

tmp = [1, 0.13,0.52,0.3]; 
a(1,1:length(tmp)) = tmp; 
tmp = [1, 0, .268]; 
a(2,1:length(tmp)) = tmp; 
+0

Con method (1) se si sapesse per quanto tempo ciascun array sarebbe stato (tutti di lunghezza diversa) c'è un modo per inizializzare 'a' in modo da poter preallocare la memoria? – Edd

+1

@clairharrison: sì. '[a {1:33}] = deal (zeri (20,4));' Si noti che se 'a' è stato precedentemente dichiarato, è necessario cancellarlo o dichiarare esplicitamente l'array di celle come' a = cell (1,33) '. – Jonas