Descripción del problema: - Quiero crear 50 instancias de un vector (1 dimensión) que contenga números reales aleatorios (flotante). El tamaño de la matriz (1 dimensión) será, por ejemplo, 30 mil. ¿Cómo procedo de modo que la sobrecarga sea mínima o la complejidad mínima?¿Cómo puedo crear vectores aleatorios grandes de manera eficiente, sin recurrir a los bucles?
Respuesta
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)
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
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
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
@SKM: ver mi actualización. – Gacek
- 1. Cómo dividir archivos grandes de manera eficiente
- 2. ¿Deberían preferirse los "bucles while" a los "bucles for" para bucles grandes y necesarios en R?
- 3. ¿Cómo crear combinaciones de varios vectores sin bucles de hardcoding en C++?
- 4. ¿Cómo generar la siguiente secuencia sin recurrir a un bucle?
- 5. Los bucles grandes se cuelgan en R?
- 6. Bucles paralelos y resultados aleatorios de resultados aleatorios
- 7. ¿Cómo puedo generar números aleatorios en un microcontrolador de manera eficiente?
- 8. Combinaciones de vectores de computación eficiente
- 9. ¿Cómo almacenan/recuperan los videojuegos de manera eficiente grandes cantidades de datos?
- 10. Generando números aleatorios muy grandes java
- 11. ¿Cómo puedo poner en práctica esta manera más eficiente
- 12. ¿La manera más eficiente de crear miniaturas?
- 13. Cómo generar números aleatorios grandes C
- 14. Conversión eficiente entre vectores en caja y sin caja
- 15. ¿Cómo puedo convertir un InputStream sin comprimir en un InputStream gzip'ed de manera eficiente?
- 16. Factorizar un número grande de manera eficiente con gmp
- 17. ¿Puedo usar Lapack para calcular los valores propios y vectores propios de matrices dispersas grandes?
- 18. En clojure, lo que es una forma eficiente para calcular la media de los vectores enteros
- 19. ¿Cómo puedo generar números aleatorios sin la función rand()?
- 20. Crear conjunto de JPG aleatorios
- 21. manera eficiente para crear una matriz dispersa en diagonal
- 22. En Python, ¿cómo puedo administrar de manera eficiente las referencias entre los archivos de script?
- 23. ¿Cómo se pueden pasar las estructuras grandes por valor de manera eficiente?
- 24. ¿Cómo puedo vaciar de manera eficiente un archivo Perl DBM?
- 25. ¿Cómo puedo reutilizar una conexión HttpClient de manera eficiente?
- 26. optimización del valor de retorno vs auto_ptr para vectores grandes
- 27. ¿Cómo puedo determinar de manera eficiente si dos listas contienen elementos ordenados de la misma manera?
- 28. Crear entradas de bases de datos masivas de manera eficiente?
- 29. ¿Cómo crear un autocompletado eficiente?
- 30. vectores Boost versus vectores STL
@ 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
@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
@ Gacek, gracias por su tiempo y esfuerzo. – SKM