gpt4 book ai didi

python - 更新 HDF 文件中的一个字段

转载 作者:行者123 更新时间:2023-12-01 02:37:24 25 4
gpt4 key购买 nike

我似乎无法让它发挥作用。所有示例和线程都让人创建新的数据集。我只想更新已创建的数据集中的一个字段。

这是我所拥有的:

h5_file = h5py.File(event_file_path, "r+") #this works

event_processing_status = int(h5_file[PATH][STATUS].value[0]['Status']) #this works
print({"{0:b}".format(event_processing_status)) #this works
event_processing_status = (event_processing_status | STATUS_UPDATE) #this works
h5_file[PATH][STATUS].value[0]['Status'] = event_processing_status #updating???, no error
event_processing_status = int(h5_file[PATH][STATUS].value[0]['Status']) #this works
print({"{0:b}".format(event_processing_status)) #not the update value

h5_file.close()

我做错了什么?

更多信息:数据集列的数据类型:

dset = h5_file[PATH][STATUS] 
print(dset.dtype) gives:
[('Status', '<u8'), ('Segments', '<u4'), ('Characterized', '<u4'), ('More_Segments', '<u4'), ('ID', '<i4'), ('Releases', '<u2'), ('Type', '|u1'), ('Track', '<i4')]

dset[0,'Status'] = event_processing_status gives:
TypeError: Field name selections are not allowed for write.

最佳答案

跟进我的评论,假设您的数据集是结构化/复合数据类型

In [144]: f = h5py.File('test.h5','w')
In [145]: arr = np.ones((3,), dtype='i,f') # structured array
In [146]: arr
Out[146]:
array([(1, 1.), (1, 1.), (1, 1.)],
dtype=[('f0', '<i4'), ('f1', '<f4')])

使用数据创建数据集

In [147]: ds = f.create_dataset('arr',data=arr)
In [148]: ds
Out[148]: <HDF5 dataset "arr": shape (3,), type "|V8">
In [149]: ds.value
Out[149]:
array([(1, 1.), (1, 1.), (1, 1.)],
dtype=[('f0', '<i4'), ('f1', '<f4')])

我可以使用记录 ID 和字段名称对其进行索引;这不适用于 ds.valuearr

In [151]: ds[0,'f0']
Out[151]: 1
In [152]: ds[0,'f0'] = 2 # and I can assign values
In [153]: ds.value
Out[153]:
array([(2, 1.), (1, 1.), (1, 1.)],
dtype=[('f0', '<i4'), ('f1', '<f4')])

我可以使用单独的记录和字段条目进行索引;但不能以这种方式更改值:

In [154]: ds[0]['f1']
Out[154]: 1.0
In [155]: ds[0]['f1'] = 234
In [156]: ds.value
Out[156]:
array([(2, 1.), (1, 1.), (1, 1.)],
dtype=[('f0', '<i4'), ('f1', '<f4')])
In [157]: ds['f1'][0] = 234
In [158]: ds.value
Out[158]:
array([(2, 1.), (1, 1.), (1, 1.)],
dtype=[('f0', '<i4'), ('f1', '<f4')])

作业需要组合索引

In [159]: ds[0,'f1'] = 234
In [160]: ds.value
Out[160]:
array([(2, 234.), (1, 1.), (1, 1.)],
dtype=[('f0', '<i4'), ('f1', '<f4')])

关于python - 更新 HDF 文件中的一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46081402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com