1

尝试创建相当大的 numpy ndarray 数据集时遇到一个非常奇怪的问题。

例如

import h5py
import numpy as np

test_h5=h5py.File('test.hdf5','w')

n=3055693983 # fail
n=10000000000 # works
n=40000000000 # fail
n=100000000000 # works
n=20000000000 #fail
n=512 # works

test_h5.create_dataset('matrix', shape=(n,n), dtype=np.int8, compression='gzip', chunks=(256,256))
print(test_h5['matrix'].shape)
a=test_h5['matrix']
a[0:256,0:256]=np.ones((256,256))

块大小为 (256,256)。

如果上述 ndarray 设置为 (512,512),则一切正常。

如果上面的 ndarray 设置为(100000000000,100000000000),一切正常...

理想情况下,我想要一个大小为 (3055693983,3055693983) 的 ndarray,但失败并显示以下内容:

(3055693983, 3055693983)
回溯(最近一次通话最后):   
文件“h5.py”,第 16 行,在
    a[0:256,0:256]=np.ones((256,256))   
文件“h5py/_objects.pyx”,第 54 行,在 h5py._objects.with_phil.wrapper (/home/ilan/minonda/conda-bld/work/h5py/_objects.c:2696)   
文件“h5py/_objects.pyx”,第 55 行,在 h5py._objects.with_phil.wrapper (/home/ilan/minonda/conda-bld/work/h5py/_objects.c:2654)   
文件“/home/user/anaconda2/lib/python2.7/site-packages/h5py/_hl/dataset.py”,第 618 行,在 __setitem__
    self.id.write(mspace, fspace, val, mtype, dxpl=self._dxpl)   
文件“h5py/_objects.pyx”,第 54 行,在 h5py._objects.with_phil.wrapper (/home/ilan/minonda/conda-bld/work/h5py/_objects.c:2696)   
文件“h5py/_objects.pyx”,第 55 行,在 h5py._objects.with_phil.wrapper (/home/ilan/minonda/conda-bld/work/h5py/_objects.c:2654)   
文件“h5py/h5d.pyx”,第 221 行,在 h5py.h5d.DatasetID.write (/home/ilan/minonda/conda-bld/work/h5py/h5d.c:3527)   
文件“h5py/_proxy.pyx”,第 132 行,在 h5py._proxy.dset_rw (/home/ilan/minonda/conda-bld/work/h5py/_proxy.c:1889)   
文件“h5py/_proxy.pyx”,第 93 行,在 h5py._proxy.H5PY_H5Dwrite (/home/ilan/minonda/conda-bld/work/h5py/_proxy.c:1599)
IOError:无法准备写入数据(无法检索文件数据集中的元素数量)

将 ndarray 设置为几个随机大小会产生混合结果。有些工作,有些不工作......我认为这可能很简单,比如 ndarray 的大小不能被 chunk_size 整除,但这似乎不是问题。

我在这里想念什么?

4

0 回答 0