在h5py数据集中添加或删除特定的行或列

6 投票
1 回答
4003 浏览
提问于 2025-04-18 03:47

一旦你创建了一个h5py 数据集,那么如何从一个 NxM 的数组中添加或删除特定的行或列呢?

我的问题和这个问题有点像,但我不想随便截断或扩展数组。在删除时,我需要能够指定确切要删除的行或列。

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

1 个回答

7

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行,只需交换下标。 如果你经常需要这样做,可以很容易地写一个封装函数来简化这个过程。

撰写回答