h5py 无法将元素 0 转换为 hsize_t
Posted
技术标签:
【中文标题】h5py 无法将元素 0 转换为 hsize_t【英文标题】:h5py cannot convert element 0 to hsize_t 【发布时间】:2016-09-04 09:41:09 【问题描述】:我在 hdf5 文件中有大量图像,我想加载和分析这些图像。每个图像都是 1920x1920 uint16 并且将它们全部加载到内存中会使计算机崩溃。有人告诉我,其他人通过切片图像来解决这个问题,例如如果数据是 1920x1920x100(100 张图像),那么他们读取每个图像的前 80 行并分析该切片,然后移动到下一个切片。我可以毫无问题地做到这一点,但是当我尝试在 hdf5 文件中创建数据集时,它得到一个 TypeError: Can't convert element 0 ... to hsize_t
我可以用这个非常简化的代码重现问题:
with h5py.File('h5file.hdf5','w') as f:
data = np.random.randint(100, size=(15,15,20))
data_set = f.create_dataset('data', data, dtype='uint16')
给出输出:
TypeError: Can't convert element 0 ([[29 50 75...4 50 28 36 13 72]]) to hsize_t
我也尝试过省略“data_set =”和“dtype='uint16'”,但仍然遇到同样的错误。那么代码是:
with h5py.File('h5file.hdf5','w') as f:
data = np.random.randint(100, size=(15,15,20))
f.create_dataset('data', data)
谁能给我任何关于问题所在的提示? 干杯!
【问题讨论】:
【参考方案1】:create_dataset
的第二个参数是shape参数(见docs),但是你传递的是整个数组。如果要使用现有数组初始化数据集,则必须使用 data
关键字指定它,如下所示:
data_set = f.create_dataset('data', data=data, dtype="uint16")
【讨论】:
以上是关于h5py 无法将元素 0 转换为 hsize_t的主要内容,如果未能解决你的问题,请参考以下文章
将父元素添加到子元素以具有一个元组(将 XML 转换为字典集合时)
如何使用 Python 和 h5py 读取 HDF5 属性(元数据)