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 属性(元数据)

将 HDF5 文件转换为其他格式

在 Python Pandas 中将带有元素日期标签的年度财政数据元组转换为时间序列

如何将元组列表转换为 pandas 数据框,以便每个元组的第一个值代表一列?