【问题标题】:Updating h5py Datasets更新 h5py 数据集
【发布时间】:2013-04-19 06:36:25
【问题描述】:

有人知道从 h5py 更新 hdf5 数据集吗? 假设我们创建如下数据集:

import h5py
import numpy
f = h5py.File('myfile.hdf5')
dset = f.create_dataset('mydataset', data=numpy.ones((2,2),"=i4"))
new_dset_value=numpy.zeros((3,3),"=i4")

是否可以将 dset 扩展为 3x3 numpy 数组?

【问题讨论】:

    标签: python hdf5 h5py


    【解决方案1】:

    您需要创建具有“可扩展”属性的数据集。在初始创建数据集后无法更改此设置。为此,you need to use the "maxshape" keywordmaxshape 元组中的 None 值意味着该维度可以是无限大小的。所以,如果f 是一个 HDF5 文件:

    dset = f.create_dataset('mydataset', (2,2), maxshape=(None,3))
    

    创建一个大小为 (2,2) 的数据集,该数据集可以沿第一个维度无限扩展,沿第二个维度扩展为 3。现在,您可以使用resize 扩展数据集:

    dset.resize((3,3))
    dset[:,:] = np.zeros((3,3),"=i4")
    

    第一个维度可以任意增加:

    dset.resize((10,3))
    

    【讨论】:

    • resize 也接受一个轴参数,因此您只需为要扩展的轴指定新大小,而不是全部:dset.resize(10, axis=0)
    • 这非常有用@velotron,可以将其添加到已接受的答案中,因为对于多维数组,这样做更容易。
    • 这个例子会覆盖文件中之前的内容吗?还是只是追加新内容?
    • 您在增加或减少大小时“附加”到当前数据。调整数据集大小时,数据的索引不会更改。 docs.h5py.org/en/latest/faq.html
    • 当我在寻找它时,如果你想调整一维数组的大小,你必须将 (None, ) 传递给 maxshape,不要忘记写,使其成为一个元组。也可以使用 resize 方法或使用 Joseph 提到的 axie=0。
    猜你喜欢
    • 2017-06-12
    • 2018-01-05
    • 2019-10-05
    • 2016-01-10
    • 2014-06-18
    • 2015-10-29
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多