Construyendo una gran matriz numpy usando pytables

¿Cómo puedo crear una gran matriz numpy utilizando pytables. Intenté esto, pero me da el “ValueError: la matriz es demasiado grande”. error:

import numpy as np import tables as tb ndim = 60000 h5file = tb.openFile('test.h5', mode='w', title="Test Array") root = h5file.root h5file.createArray(root, "test", np.zeros((ndim,ndim), dtype=float)) h5file.close() 

Puedes intentar usar la clase tables.CArray ya que admite compresión, pero …

Creo que las preguntas tienen más que ver con numpy que con pytables porque estás creando un array usando numpy antes de almacenarlo con pytables.

De esa manera, se necesita una gran cantidad de ram para ejecutar np.zeros ((ndim, ndim) , y este es probablemente el lugar donde se levanta la excepción: “ValueError: array es demasiado grande”.

Si la matriz / matriz no es densa, puede usar la representación de matriz dispersa disponible en scipy: http://docs.scipy.org/doc/scipy/reference/sparse.html

Otra solución es intentar acceder a su matriz a través de trozos si no necesita una matriz completa a la vez; consulte esta secuencia: Matrices muy grandes que usan Python y NumPy

Aprovechando la respuesta de @ b1r3k, para crear una matriz a la que no vaya a tener acceso de una sola vez (es decir, llevar todo a la memoria), desea utilizar una CArray (matriz fragmentada). La idea es que luego la rellenarías y accederías de forma incremental:

 import numpy as np import tables as tb ndim = 60000 h5file = tb.openFile('test.h5', mode='w', title="Test Array") root = h5file.root x = h5file.createCArray(root,'x',tb.Float64Atom(),shape=(ndim,ndim)) x[:100,:100] = np.random.random(size=(100,100)) # Now put in some data h5file.close()