【问题标题】:Adding or removing specific rows or columns in an h5py dataset在 h5py 数据集中添加或删除特定的行或列
【发布时间】:2014-06-07 07:05:19
【问题描述】:

创建h5py dataset 后,如何在 NxM 数组中添加或删除特定的行或列?

我的问题类似于this one,但我不想盲目地截断或扩展数组。删除时,我需要能够指定要删除的确切行或列。

对于添加,我知道我必须在创建初始数据集时指定 maxshape=(None, None),但 resize 方法似乎不允许您指定在缩小大小时会截断哪些行或列。

【问题讨论】:

    标签: python hdf5 h5py


    【解决方案1】:

    h5py 并不是真正为此而设计的。 Pandas 可能是一个更好用的库,因为它是围绕表格的概念构建的。

    话虽如此,下面是如何做到这一点:

    In [1]: f = h5py.File('test.h5')
    
    In [2]: arr = rand(4,4)
    
    In [3]: dset = f.create_dataset('foo',data=arr,maxshape=(2000,2000))
    
    In [4]: dset[:]
    Out[4]:
    array([[ 0.29732874,  0.59310285,  0.61116263,  0.79950116],
           [ 0.4194363 ,  0.4691813 ,  0.95648712,  0.56120731],
           [ 0.76868585,  0.07556214,  0.39854704,  0.73415885],
           [ 0.0919063 ,  0.0420656 ,  0.35082375,  0.62565894]])
    
    In [5]: dset[1:-1,:] = dset[2:,:]
    
    In [6]: dset.resize((3,4))
    
    In [7]: dset[:]
    Out[7]:
    array([[ 0.29732874,  0.59310285,  0.61116263,  0.79950116],
           [ 0.76868585,  0.07556214,  0.39854704,  0.73415885],
           [ 0.0919063 ,  0.0420656 ,  0.35082375,  0.62565894]])
    

    这会从dset 中删除第 1 列。它通过将第 2 列和第 3 列分别分配给 1 和 2 来实现,然后将数据集缩小一列。交换下标以删除第 1 行。如果您要经常这样做,您可以轻松地为此编写一个包装器。

    【讨论】:

      猜你喜欢
      • 2014-05-05
      • 2021-12-26
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多