python - 如何在 HDF5 文件中保存 Python dtype ('object' )?

标签 python numpy hdf5

我正在尝试将 .mat 文件中的数据加载到 python 中,以便我可以将其保存在 HDF5 文件中。

问题是 scipy.io.loadmat 返回一个包含 dtype=[('counts', '|O4')]) 数组的字典

每当我尝试使用返回的数组之一创建数据集时,我都会收到以下错误:

>> mat = scipy.io.loadmat('state-10.mat')
>> h = h5py.File('test.hdf5','w')
>> h.create_dataset('set', data=mat['ProteinComplex'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/h5py/_hl/group.py", line 69, in create_dataset
    dsid = dataset.make_new_dset(self, shape, dtype, data, **kwds)
  File "/usr/lib/python2.7/dist-packages/h5py/_hl/dataset.py", line 88, in make_new_dset
    tid = h5t.py_create(dtype, logical=1)
  File "h5t.pyx", line 1332, in h5py.h5t.py_create (h5py/h5t.c:11600)
  File "h5t.pyx", line 1373, in h5py.h5t.py_create (h5py/h5t.c:11209)
  File "h5t.pyx", line 1311, in h5py.h5t._c_compound (h5py/h5t.c:10695)
  File "h5t.pyx", line 1332, in h5py.h5t.py_create (h5py/h5t.c:11600)
  File "h5t.pyx", line 1402, in h5py.h5t.py_create (h5py/h5t.c:11465)
TypeError: Object dtype dtype('object') has no native HDF5 equivalent

有什么解决方法吗?

最佳答案

原来 mat['ProteinComplex'] 的类型是一个 scipy 多维数组 (ndarray)。可以使用 ndarray.tolist() 方法将它们转换为列表。如果我们将 nd 数组更改为列表,它将在使用 H5Py 创建数据集时起作用

>> mat = scipy.io.loadmat('state-10.mat')
>> h = h5py.File('test.hdf5','w')
>> protein_complex = mat['ProteinComplex'].tolist()
>> h.create_dataset('ProteinComplex', data=protein_complex)

关于python - 如何在 HDF5 文件中保存 Python dtype ('object' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16064896/

相关文章:

c++ - Windows下的HDF5作为动态链接库Qt/C++

python - 在 Python 中加载 csv 并保存 HDF5

arrays - 如何使用 NumPy 数组索引从 2D 数组中选择 2 列以从中选择唯一值?

python - 将回归扩展到 Matplotlib 中的数据之外

python - 我需要帮助在 PyQt5 中制作菜单栏

javascript - python 元组列表到 javascript 数组数组

python - 比较 numpy 矩阵的列与数组

c - HDF5:如何将数据附加到数据集(可扩展数组)

python - 如何删除 Pandas 组中的重复项

Python dhcp 客户端