2011-12-27 54 views
7

如何使用pytables創建巨大的numpy數組。我試過這個,但給了我「ValueError:數組太大了。」錯誤:使用pytables構建巨大的numpy數組

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

回答

8

你可以嘗試使用tables.CArray類,因爲它支持壓縮,但...

我認爲問題更多的是numpy的比pytables因爲你正在創建使用numpy的陣列與存儲前pytables。

這樣,你就需要大量的RAM來執行np.zeros((NDIM,NDIM) - 這可能是其中的例外的地方:「ValueError異常:數組太大」提高

如果矩陣/數組不濃,那麼你可以利用現有的稀疏矩陣表示在SciPy的:http://docs.scipy.org/doc/scipy/reference/sparse.html

另一個解決辦法是嘗試通過數據塊訪問陣列,如果你不馬上需要整個陣列 - 退房此主題:Very large matrices using Python and NumPy

14

搭載@ b1r3k的迴應,創建一個你不會一次訪問的數組(即把整個事情帶入記憶中),你想要使用CArray(分塊數組)。這個想法是,你將然後遞增填寫和訪問它:

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