编辑HDF5矩阵值

2024-10-04 11:26:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编辑一个以hdf5格式提供给我的数据集,并重新保存它。我以前已经能够编辑hdf5文件中的值,但在这种情况下,我的旧方法似乎不起作用(我将在下面展示这两个示例)。在

我有一个三维数据集的形状(101,4,2),我从一个HDF5文件提取。在这个例子中,我尝试将每个值设置为浮点值1.0。在

file_name = r'C:\Labber\Data\2018\06\Data_0601\CSing.hdf5'
f = h5py.File(file_name, 'r+')
h5entry = f['/Data/Data']

for i in range(len(h5entry[:,0,0])):
    print(h5entry[i][0][1]) #prints 0.0
    h5entry[i][0][1] = 1.0 
    print(h5entry[i][0][1]) #still prints 0.0

如果我创建一个numpy数组而不是对HDF5数据集的引用,我可以让它工作。在

^{pr2}$

但是,我有一个问题,即条目采用numpy数组格式,我无法轻松地将数据集设置为数组。我可以从这个数组中创建一个新的数据集,删除旧的数据集,然后重新分配新的数据集,但这似乎是一种非常笨拙的方法。在

此外,我已经能够直接编辑HDF5键之前,这让我更加困惑。例如,我以前成功地完成了以下工作

file_name = r'C:\Labber\Data\2018\06\Data_0601\CSing.hdf5'
f = h5py.File(file_name, 'r+')
entry = f['Step list'][i]
entry['use_relations'] = relations
f['Step list'][i] = entry

这很管用。你知道这里发生了什么吗?我怎样才能以最有效的方式完成这件事?在


Tags: 文件数据方法name编辑data格式数组
1条回答
网友
1楼 · 发布于 2024-10-04 11:26:09

问题在于多步索引

h5entry[i][0][1] = 1.0

试试看

^{pr2}$

h5entry[i][0][1]可以获取值,但不能用于设置,因为h5entry[i]是数据集的副本,而不是viewh5entry[i]是数组,不是数据集。在


entry[i][0][1] = 1.0

之所以有效,是因为entry已经是ndarrayentry[i]view,正如{}。另一方面,数组上的高级索引将不起作用:entry[[1,2]][:,0][:,1]=3,因为entry[[1,2]]是一个副本。在

由于视图与副本之间存在这些细微差别,因此使用单步索引通常更安全,无论是使用h5py还是{}:

entry[[0,1],0,1] = 3

有时,如果我们在索引时包含隐式:,这会有所帮助:

entry[i,:,:][0,:][1]

代码不需要,但我需要。我需要一个提醒,我在每个阶段工作的维度有多少。在


f['Step list'][i] = entry

因为f['Step list']是数据集,而不是数据集的副本。在

相关问题 更多 >