2011-12-27 13 views
7

Come posso creare un enorme array numpy usando pytables. Ho provato questo, ma mi dà il "ValueError: array è troppo grande". errore:Costruire un enorme array numpy usando pytables

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() 

risposta

8

Si potrebbe provare a utilizzare la classe tables.CArray in quanto supporta la compressione, ma ...

Penso domande è più su NumPy di ​​pytables perché si sta creando array usando NumPy prima di riporlo con pytables.

In questo modo avete bisogno di un sacco di RAM per eseguire np.zeros ((Ndim, Ndim) - e questo è probabilmente il luogo dove eccezione:. "ValueError: array è troppo grande" è sollevata

Se matrice/matrice non è denso allora si potrebbe utilizzare la rappresentazione matrice sparsa disponibile in SciPy: http://docs.scipy.org/doc/scipy/reference/sparse.html

Un'altra soluzione è quella di tentare di accedere al campo tramite pezzi se non hai bisogno di tutta una serie in una sola volta - Vai questo thread: Very large matrices using Python and NumPy

14

Piggyback di @ risposta di b1r3k, per creare un array che non si accederà a tutti contemporaneamente (ad es. portare l'intera cosa in memoria), si desidera utilizzare un CArray (Chunked Array). L'idea è di riempire e accedere in modo incrementale:

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()