H5PY问题保存复合numpy数组

问题描述 投票:1回答:1

为了对文件格式进行逆向工程,我得到了一个以下最小的例子,用于创建复合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()

此代码因错误而崩溃

回溯(最近一次调用最后一次):文件“test.py”,第13行,在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(self,shape,dtype,data,** kwds)文件”/opt/anaconda3/lib/python3.7/site-packages /h5py/_hl/dataset.py“,第75行,在make_new_dset中shape =元组(形状)TypeError:在0-d数组上迭代

我怎样才能克服这个问题?

python numpy h5py
1个回答
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()
© www.soinside.com 2019 - 2024. All rights reserved.