Numpy 对象数据类型数据类型(';O';)没有本地HDF5等效项
在stack overflow中,似乎有几个类似的问题被问到了,但是没有一个问题得到了正确的回答,也没有一个问题描述了确切的例子 我在将数组或列表保存到hdf5时遇到问题 我有几个文件包含(n,35)维的列表,其中n在每个文件中可能不同。它们都可以用下面的代码保存在hdf5中Numpy 对象数据类型数据类型(';O';)没有本地HDF5等效项,numpy,hdf5,Numpy,Hdf5,在stack overflow中,似乎有几个类似的问题被问到了,但是没有一个问题得到了正确的回答,也没有一个问题描述了确切的例子 我在将数组或列表保存到hdf5时遇到问题 我有几个文件包含(n,35)维的列表,其中n在每个文件中可能不同。它们都可以用下面的代码保存在hdf5中 hdf = hf.create_dataset(fname, data=d) 但是,如果我想将它们合并到3d中,则会出现如下错误 对象dtype dtype('O')没有本机HDF5等效项 我不知道为什么它会变成dtyp
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)
如何保存这些数据?
我尝试了两个测试,当我使用更改时,似乎所有的_数据都变成了带有“object”的数据类型
all_data = np.array(all_data)
看起来它在保存hdf5时也有类似的问题
同样,如何在hdf5中保存此类数据?我在
h5py
中遇到了类似的问题,并使用array更改了NumPy数组的类型。astype
对我很有效(我相信这会将类型从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
)。由于d
的形状不同,NumPy
无法从它们生成3d数组。它必须生成1d对象数据类型数组h5py
无法保存它(它只保存数组,不保存列表或其他python对象)。您将不得不接受原始格式,每个数据集一个数组。您的相邻SO问题中的类似问题:另请参阅(有关为什么只能在HDF5文件中存储简单数组的一些详细信息)。