在h5py数据集中添加或删除特定的行或列
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行,只需交换下标。 如果你经常需要这样做,可以很容易地写一个封装函数来简化这个过程。