我有一个相当大的HDF5文件生成的PyTables,我试图读取群集。当我在单独的块中读取时,我遇到了NumPy的问题。让我们一起去的例子:Numpy和PyTables浮点异常
数组内的HDF5文件是总的形状,
In [13]: data.shape
Out[13]: (21933063, 800, 3)
这个阵列中的每个条目是np.float64
。
我让每个节点读取大小为(21933063,10,3)
的片。不幸的是,NumPy似乎无法一次读取所有2,100万个子映射。我试图做到这一点依次瓜分这些切片放入大小(2193306,10,3)
的10片,然后用下面的减少把事情的工作:
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
。此代码适用于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是罪魁祸首。跟踪中显示的两个主要文件是libhdf5.so.6
和与blosc
有关的文件。
另外请注意,如果我有k=8
,我得到:
In [12]: a.shape
Out[12]: (17546448, 10, 3)
但是,如果我追加的最后一个子切片,我得到:
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