好吧,似乎在堆栈溢出中曾问过几个类似的问题,但似乎没有一个回答正确或正确,也没有描述确切的例子。
我在将数组或列表保存到hdf5中时遇到问题...
我有几个文件包含(n,35)维的列表,其中每个文件中的n可能不同。它们每个都可以使用以下代码保存在hdf5中。
hdf = hf.create_dataset(fname, data=d)
但是,如果我想将它们合并以在3d中制作,则会出现以下错误。
对象dtype dtype('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)
如何保存此类数据? 我尝试了几次测试,当我用'p'更改它们时,似乎all_data变成了'object'的dtype。
all_data = np.array(all_data)
看起来与保存hdf5有类似的问题。
再次,如何将此类数据保存在hdf5中?
答案 0 :(得分:2)
我遇到了h5py
的类似问题,并且使用array.astype
更改NumPy数组的类型对我来说很有效(我相信这会将类型从dtype('O')
更改为数据您指定的类型)。请参见下面的代码段:
import numpy as np
print(X.dtype)
--> dtype('O')
print(X.astype(np.float64).dtype)
--> dtype('float64')
使用此数据类型转换运行h5.create_dataset
时,我能够成功创建h5数据集。希望这会有所帮助!
一个附加更新:我相信NumPy对象类型'O'
是在NumPy数组本身具有混合元素类型(例如np.int8
和np.float32
)时创建的。