Numpy 对象数据类型数据类型(';O';)没有本地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

在stack overflow中,似乎有几个类似的问题被问到了,但是没有一个问题得到了正确的回答,也没有一个问题描述了确切的例子

我在将数组或列表保存到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)
如何保存这些数据? 我尝试了两个测试,当我使用更改时,似乎所有的_数据都变成了带有“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文件中存储简单数组的一些详细信息)。