私はクラスタで読み込もうとしているPyTablesによって生成されたむしろ大きなHDF5ファイルを持っています。私はNumPyの問題に遭遇しています。私は個々のチャンクで読みました。 HDF5ファイル内の内の配列の合計形状があるNumpyとPyTablesを使用した浮動小数点例外
、
In [13]: data.shape
Out[13]: (21933063, 800, 3)
この配列の各エントリはnp.float64
です:のは、一例で行こう。
各ノードには、サイズが(21933063,10,3)
の読み取りスライスがあります。残念ながら、NumPyは一度に2,100万のすべてのサブスライスを読むことができないようです。
In [8]: a = reduce(lambda x,y : np.append(x,y,axis=0), [np.array(data[i* \
chunksize: (i+1)*chunksize,:10],dtype=np.float64) for i in xrange(k)])
In [9]:
1 <= k <= 10
とchunksize = 2193306
を:私はサイズ(2193306,10,3)
の10枚のスライスにこれらのスライスを分割して、物事が作業を取得するために減らす、次を使用して、この順に行うことを試みました。このコードはk <= 9
で動作します。そう私は、次を得る:
In [8]: a = reduce(lambda x,y : np.append(x,y,axis=0), [np.array(data[i* \
chunksize: (i+1)*chunksize,:10],dtype=np.float64) for i in xrange(k)])
Floating point exception
[email protected] 00:00:00 ~
$
私は何が起こっているかを把握するのValgrindのmemcheck
ツールを使用してみましたし、PyTablesが犯人であるかのように思えます。トレースに表示される2つのメインファイルは、libhdf5.so.6
と、blosc
に関連するファイルです。また
、私はk=8
を持っている場合は、私が得ることに注意してください:
In [12]: a.shape
Out[12]: (17546448, 10, 3)
しかし、私は最後のsubsliceを追加した場合、私が手:
In [14]: a = np.append(a,np.array(data[8*chunksize:9*chunksize,:10], \
dtype=np.float64))
In [15]: a.shape
Out[15]: (592192620,)
誰が何をするかのいずれかのアイデアを持っています?ありがとう!
何である直接numpyの配列にデータを読み込むときに取得エラー?複数の配列を追加して構築するのではなく、目的の配列を事前に割り当てることをお勧めします。 – DaveP