尝试创建相当大的 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 整除,但这似乎不是问题。
我在这里想念什么?