2011-12-27 11 views
7

pytablesを使って大量の配列を作成するにはどうすればいいですか?私はこれを試みたが、私に "ValueError:配列が大きすぎます。"エラー: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() 

答えて

8

あなたはそれが圧縮をサポートしているようtables.CArrayクラスを使用しようとすることができますが...

私はあなたがそれを保存する前にnumpyのを使用してアレイを作成しているので、質問がpytablesよりnumpyの詳細だと思いますpytables。あなたはnp.zeros((ndim、ndim)実行するための多くのRAM必要とするようにし

- これはおそらく、例外場所です:。「と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() 
関連する問題