h5py无法将元素0转换为hsize_t

时间:2016-05-09 16:42:39

标签: python hdf5 h5py

我在hdf5文件中有一大堆图像,我想加载和分析。每个图像都是1920x1920 uint16并将它们全部加载到内存中会导致计算机崩溃。我被告知其他人通过切割图像来解决这个问题,例如:如果数据是1920x1920x100(100个图像),那么他们读取每个图像的前80行并分析该切片,然后移动到下一个切片。我可以没有问题,但是当我尝试在hdf5文件中创建数据集时,它会得到 TypeError:无法将元素0转换为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 个答案:

答案 0 :(得分:9)

create_dataset的第二个参数是形状参数(请参阅docs),但是您传递了整个数组。如果要使用现有数组初始化数据集,则必须使用data关键字指定此项,如下所示:

data_set = f.create_dataset('data', data=data, dtype="uint16")