对象dtype dtype('O')没有等效的本机HDF5

时间:2018-11-18 07:15:32

标签: numpy hdf5

好吧,似乎在堆栈溢出中曾问过几个类似的问题,但似乎没有一个回答正确或正确,也没有描述确切的例子。

我在将数组或列表保存到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中?

1 个答案:

答案 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.int8np.float32)时创建的。