获取<<对象 dtype 没有本机 HDF5 等效项>>尝试保存数据时



我知道这个问题已经在操作系统上了,但我仍然没有找到解决问题的方法。我认为问题是X的维数是3。如何将X传输到数据,以便将大小考虑在内?在我的示例中,我尝试使用h5py保存数据。X的dtype=uint8。

file.create_dataset('X', data=np.array(X))

在这种情况下,会出现以下错误:

TypeError: Object dtype dtype('O') has no native HDF5 equivalent

当您的numpy数组是一个不规则的数组(二维子数组大小不同(时,经常会发生这种情况。例如;CCD_ 1。一个快速的解决方案是:file.create_dataset('X', data=np.array(ragged_array_X).to_list())

如果不是这样,并且您没有一个粗糙的数组,那么您可以尝试将numpy数组显式转换为uint8数据类型。如果这个实例化失败,那么数组的某些部分是损坏的数据类型(可能是nan或其他丢失的值(,您应该首先修复它。

file.create_dataset('X', data=np.array(ragged_array_X, dtype=uint8)

看起来这些建议可能并不是你想要的,因为你说";尺寸被考虑在内";。看起来你的数组是三维的(不确定是否粗糙(。

假设最坏的情况:您真的想保留一个粗糙但三维的数组的形状。HDF5有一个新功能:

发件人:(请参阅:https://docs.h5py.org/en/stable/special.html)

dt = h5py.vlen_dtype(np.dtype('int32'))
dset = f.create_dataset('vlen_int', (100,), dtype=dt)
dset[0] = [1,2,3]
dset[1] = [1,2,3,4,5]

当它应用于您的示例时,解决方案很简单:

dt = h5py.vlen_dtype(np.dtype('uint8'))
dset = f.create_dataset('X', np.array(X), dtype=dt)

最新更新