2010-02-02 21 views
8

Tengo un problema con matlab cuando intento crear una matriz con un tamaño muy grande como 40000x40000.cómo crear una matriz muy grande usando matlab

por ejemplo:

x = ceros (40000,40000);

el mensaje de error es "se excede ??? tamaño variable máximo permitido por el programa."

¿Hay alguna solución.

También tengo otra pregunta, ¿podemos tener una matriz con tamaño de columna variable como en java?

Respuesta

1

40k * 40k => 1.6 * 10^9 Números. Creo que Zeros devolverá carrozas. Entonces necesitaría alrededor de 1.6 * 10^9 Flotadores * 4 Bytes/Flotante => 6.4GB de RAM solo para esta Variable ...

¿Está seguro de que necesita una matriz tan grande?

16

40000 * 40000 * 8 bytes por número = 12 GB, seguramente no tendrá suficiente memoria.

Para crear una matriz enorme, con un montón de ceros, se necesita una matriz escasa:

m = sparse(40000, 40000) 

Para crear una matriz de variantes, se puede utilizar una matriz celular:

m = cell(3, 1) 
m(1) = [1,2,3] 
m(2) = [2,4,6,8,10] 
m(3) = 6+6i 
0

no, bueno sí compre más ram, como se indica a continuación. Sparse simplemente elimina cero elementos.

Y en matlab puede simplemente agregar las nuevas columnas/filas a la matriz para hacer una matriz más grande.

Ah, pero quieres decir, ¿puedes tener una matriz en la que una columna tenga 10 filas y otra 20 por ejemplo? No, no puedes hacer eso. No creí que pudieras en Java tbh.

4

Hay muchas cosas que puede hacer, ya que las diversas respuestas señalan. La respuesta correcta depende de tu problema real. La creación de fuerza bruta de una matriz tan grande es imposible sin una versión de 64 bits de Matlab más suficiente memoria para almacenar esa gran matriz, o almacenar la matriz de alguna otra manera. Puede almacenar la matriz fuera de línea, solo trayendo lo que necesita a medida que lo usa.

Por ejemplo, si estos números siempre serán enteros pequeños, utilice uint8 o int8, o una matriz lógica, incluso una única matriz, lo que reducirá los requisitos de memoria en comparación con las matrices dobles. O use un formulario de almacenamiento disperso según corresponda. Mucho depende de lo que hagas con la matriz.

En cuanto a una cantidad variable de elementos en una fila, utilice una matriz de celdas aquí, no una matriz plana tradicional.

0

creo archivos de disco duro utilizar para almacenar esos datos es la mejor opción

1

Una forma de evitar el problema de la memoria podría ser la creación de un matfile para su matriz. La forma en que lo entiendo es que omite la memoria y la escribe directamente en su disco duro. Intenté esto con matrices que eran demasiado grandes para la memoria de mi computadora, y fue lento, pero funcionó. Probablemente tendrás que aumentarlo un poco a la vez.

Cuestiones relacionadas