H5PY问题,无法保存复合numpy数组

时间:2019-03-25 10:24:29

标签: python numpy h5py

为了对文件格式进行反向工程,我提供了以下最小示例,用于创建复合numpy数据类型并将其保存到HDF5。原始文件似乎正在存储以下数据类型的数据集。但是,我似乎无法将此类数据集写入文件。

import numpy as np
import h5py

data = ("Many cats".encode(), np.linspace(0, 1, 20))
data_type = [('index', 'S' + str(len(data[0]))), ('values', '<f8', (20,))]

arr = np.array(data, dtype=data_type)
print(arr)

h5f = h5py.File("lol.h5", 'w')
dset = h5f.create_dataset("data", arr, dtype=data_type)
h5f.close()

此代码因错误而崩溃

  

回溯(最近通话最近):         在第13行的文件“ test.py”中           dset = h5f.create_dataset(“ data”,arr,dtype = data_type)         文件“ /opt/anaconda3/lib/python3.7/site-packages/h5py/_hl/group.py”,行   116,在create_dataset中           dsid = dataset.make_new_dset(自身,形状,dtype,数据,** kwds)         文件“ /opt/anaconda3/lib/python3.7/site-packages/h5py/_hl/dataset.py”,行   75,在make_new_dset中           形状=元组(形状)       TypeError:在0维数组上迭代

我该如何克服这个问题?

1 个答案:

答案 0 :(得分:0)

我对您的代码进行了重组/重新排序,以使其可以与h5py一起使用。 下面的代码适用于1行。您将不得不调整以使行数成为变量。

import numpy as np
import h5py

data = ("Many cats".encode(), np.linspace(0, 1, 20))
data_type = [('index', 'S' + str(len(data[0]))), ('values', '<f8', (20,))]

arr = np.zeros((1,), dtype=data_type)
arr[0]['index'] = "Many cats".encode()
arr[0]['values'] = np.linspace(0, 1, 20)

h5f = h5py.File("lol.h5", 'w')
dset = h5f.create_dataset("data", data=arr)

h5f.close()