我试图编辑一个以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
这很管用。你知道这里发生了什么吗?我怎样才能以最有效的方式完成这件事?在
问题在于多步索引
试试看
^{pr2}$h5entry[i][0][1]
可以获取值,但不能用于设置,因为h5entry[i]
是数据集的副本,而不是view
。h5entry[i]
是数组,不是数据集。在之所以有效,是因为}。另一方面,数组上的高级索引将不起作用:
entry
已经是ndarray
,entry[i]
是view
,正如{entry[[1,2]][:,0][:,1]=3
,因为entry[[1,2]]
是一个副本。在由于视图与副本之间存在这些细微差别,因此使用单步索引通常更安全,无论是使用}:
h5py
还是{有时,如果我们在索引时包含隐式
:
,这会有所帮助:代码不需要,但我需要。我需要一个提醒,我在每个阶段工作的维度有多少。在
因为
f['Step list']
是数据集,而不是数据集的副本。在相关问题 更多 >
编程相关推荐