好的,似乎在堆栈溢出中提出了几个类似的问题,但似乎没有一个正确或正确地回答,也没有一个描述了确切的例子。
我在将数组或列表保存到hdf5时遇到问题...
我有一个包含(n,35)维的多个文件列表,其中每个文件中的n可能不同。它们中的每一个都可以用下面的代码保存在hdf5中。
hdf = hf.create_dataset(fname, data=d)
然而,如果我想将它们合并到3D中,则会出现如下错误。
对象数据类型数据类型(‘O’)没有本机HDF5等效项
我不知道为什么它会变成dtype对象,因为我所做的只是这样
all_data = list()
for fname in file_list:
d = np.load(fname)
all_data.append(d)
hdf = hf.create_dataset('all_data', data=all_data)
如何保存这样的数据?我尝试了几个测试,当我用更改它们时,似乎all_data变成了带有‘Object’的dtype
all_data = np.array(all_data)
这看起来它在保存hdf5方面也有类似的问题。
同样,我如何将这些数据保存在hdf5中?
3条答案
按热度按时间xam8gpfp1#
我在使用
h5py
时遇到了类似的问题,使用array.astype
更改NumPy数组的类型对我很有效(我相信这会将类型从dtype('O')
更改为您指定的数据类型)。请参见下面的代码片段:当我使用这个数据类型转换运行
h5.create_dataset
时,我能够成功地创建一个h5数据集。希望这个能帮上忙!另一个更新:我认为NumPy对象类型
'O'
是在NumPy数组本身具有混合元素类型(例如np.int8
和np.float32
)时创建的。px9o7tmv2#
dtype('O')
代表对象。在我的例子中,我有一个列表,其中的长度不同,但得到了相同的错误。如果将其转换为NumPy数组,NumPy将警告Creating an ndarray from ragged nested sequences
。H5文件无法处理此类数据有关详细信息,请参阅this postdgenwo3n3#
当我使用以下命令时出现此错误:
但是,当我在保存数组时使用
dtype
时...问题消失了..。我猜h5py不能从未定义的数据类型创建数据集。