2010-07-06 8 views

Respuesta

4
N = 30000; %// length of your vectors 
I = 50; %// number of instances 
v = rand(I, N); 

En el ejemplo anterior que va a generar una matriz, en que cada fila es un solo vector. Los números aleatorios se generan con una distribución uniforme (para distribución gaussiana, use randn).

Si es necesario crear todos los casos utilizar un bucle separado:

for i=1:I 
    v = rand(1, N); 
    %// do something with v 
end 

Pero yo no usaría eso si fuera usted (es más lento y menos claro en mi humilde opinión).

EDITAR:
cuanto a su pregunta en virtud de la respuesta de Mau:
No, no es necesario para indexar por su cuenta. Deja que Matlab lo haga por ti.
Por ejemplo, si es necesario repetir la operación siguiente 50 veces:

x1 = sigma*y + beta * vect1; 
... 
x50 = sigma*y + beta * vect50; 

suponiendo y es un vector de tamaño 1x30000, puede calcular en una línea:

X = sigma*repmat(y, 50, 1) + beta * rand(50, 30000); 

explicación: cada fila es un vector único que quería calcular:

X(1,:) = x1; 
... 
X(50,:) = x50; 

repmat(y,50,1) repetición s su y vector 50 veces en la primera dimensión (filas)

+0

@ Gacek, es equivalente a para i = 1: 30000 para j = 1: 50 v (i) (j) = rand(); % luego uso el primer elemento de v para algunos cálculos x = sigma * y + v * beta; final final Aunque esto es crudo. – SKM

+0

@SKM: no, me malentendiste. ejemplo con un bucle 'for' para mostrarle la segunda forma de generar dichos vectores. Mira mi actualización, espero que muestre claramente la solución de tu problema. Sé que podría ser de alguna manera difícil al principio, pero trate de olvidar los bucles cuando use Matlab. – Gacek

+0

@ Gacek, gracias por su tiempo y esfuerzo. – SKM

4

crean una matriz de valores aleatorios

values = rand(50, 30000) 

50x30k entonces cada fila será un vector aleatorio valores 30k

aVector = values(3,:) % Row 3, all columns 
+0

Déjeme aclararme. Supongamos que el vector es vect1, vect2 ....., vect50 cada uno contiene 30 mil números reales/flotante. Estos serán sustituidos en una ecuación decir x1 = sigma * y + vect1 (i) * beta donde sigma y beta son constantes. ¿No necesito un bucle para obtener 30,000 valores de x? algo así ... para i = 1: 50 para j = 1: 300000 x (j) = sigma * y + vect (i) (j) * beta; final final – SKM

+1

No, puede escribir código vectorizado que usa la matriz grande (y se ejecuta más rápido). Ver: http://www.mathworks.com/support/tech-notes/1100/1109.html#operators – Mau

+0

@SKM: ver mi actualización. – Gacek

Cuestiones relacionadas