我在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)
任何人都可以给我任何关于问题的提示吗? 干杯!
答案 0 :(得分:9)
create_dataset
的第二个参数是形状参数(请参阅docs),但是您传递了整个数组。如果要使用现有数组初始化数据集,则必须使用data
关键字指定此项,如下所示:
data_set = f.create_dataset('data', data=data, dtype="uint16")