我想加载和分析hdf5-文件中的大量图像。每个图像都是1920x1920 uint16,将所有图像加载到内存中会使计算机崩溃。有人告诉我,其他人可以通过切片图像来解决此问题,例如如果数据是1920x1920x100(100张图像),则它们读取每个图像的前80行并分析该切片,然后移至下一个切片。我可以毫无问题地做到这一点,但是当我尝试在hdf5文件中创建数据集时,它会收到类型错误:无法将元素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)

谁能给我任何有关问题所在的提示吗?
干杯!

最佳答案

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

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

关于python - h5py无法将元素0转换为hsize_t,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37121110/

10-10 13:09