2010-05-05 17 views
8

Oye, teniendo un poquito de problemas. Intentando asignar una matriz de 1d de longitud variable a diferentes valores de una matriz, p.'Matriz de matrices' en matlab?

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

Sin embargo, me sale el error:

??? 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]; 

Supongo que esto significa que está esperando un valor escalar en lugar de una matriz. ¿Alguien sabe cómo asignar la matriz a este valor?

prefiero no defino directamente como una matriz 2D como lo es para hacerlo son soluciones a diferentes problemas en un bucle

Editar: ¡Gracias!

a (1,1: 4) = [1, 0.13,0.52,0.3];

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

+0

usted tiene preasignado a? Si es así, ¿cómo? –

+0

No lo preasigné, No pensé que necesitaba – bcoughlan

+0

Hasta donde yo sé, esto no se puede hacer con matrices. Si desea almacenar una matriz en una sola dirección, intente con los tipos de datos de celda o estructura. Si puedo preguntar específicamente, ¿qué le impide usar una matriz 2D? –

Respuesta

13

Lo que probablemente quería escribir era

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

es decir la primera fila es [1, 0.13,0.52,0.3] y la segunda fila es [1, 0, .268]. Esto no es posible, porque ¿cuál sería el valor de a (2,4)?

Hay dos maneras de solucionar el problema.

(1) Usar grupos de células

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

(2) Si conoce el número máximo posible de columnas de sus soluciones tendrán, puede asignar previamente la matriz, y escribir en los resultados como así (si no asignar previamente, podrás obtener relleno con ceros. también el riesgo de disminuir la velocidad del bucle de mucho, si hay muchas iteraciones, ya que la matriz tendrá que ser recreada en cada iteración.

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 el método (1) si supiera cuánto tiempo va a durar cada matriz (todas ellas con diferentes longitudes), ¿hay alguna manera de inicializar "a" para que pueda preasignar la memoria? – Edd

+1

@clairharrison: sí. '[a {1:33}] = deal (ceros (20,4));' Tenga en cuenta que si 'a' ha sido declarado previamente, debe borrarlo o declarar explícitamente el conjunto de celdas como' a = cell (1,33) '. – Jonas

Cuestiones relacionadas