好吧,似乎在堆栈溢出中提出了几个类似的问题,但似乎没有一个回答正确或正确,也没有描述确切的示例。
我在将数组或列表保存到 hdf5 时遇到问题...
我有几个文件包含 (n, 35) 维度的列表,其中每个文件中的 n 可能不同。它们中的每一个都可以使用以下代码保存在 hdf5 中。
hdf = hf.create_dataset(fname, data=d)
Run Code Online (Sandbox Code Playgroud)
但是,如果我想合并它们以在 3d 中制作,则会出现如下错误。
Object 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)
Run Code Online (Sandbox Code Playgroud)
我怎样才能保存这样的数据?我尝试了几个测试,当我用
all_data = np.array(all_data)
Run Code Online (Sandbox Code Playgroud)
看起来它在保存 hdf5 时有类似的问题。
同样,如何将这些数据保存在 hdf5 中?
我遇到了类似的问题h5py,并使用array.astype对我有用的方法更改了 NumPy 数组的类型(我相信这会将类型从dtype('O')您指定的数据类型更改为您指定的数据类型)。请参阅下面的代码片段:
import numpy as np
print(X.dtype)
--> dtype('O')
print(X.astype(np.float64).dtype)
--> dtype('float64')
Run Code Online (Sandbox Code Playgroud)
当我h5.create_dataset使用这种数据类型转换运行时,我能够成功创建一个 h5 数据集。希望这可以帮助!
一个额外的更新:我相信 NumPy 对象类型'O'是在 NumPy 数组本身具有混合元素类型(例如np.int8和np.float32)时创建的。