创建h5py 数据集后,如何从 NxM 数组中添加或删除特定的行或列?
我的问题与此类似,但我不想盲目地截断或扩展数组。删除时,我需要能够指定要删除的确切行或列。
对于添加,我知道我必须maxshape=(None, None)
在创建初始数据集时指定,但该resize
方法似乎不允许您指定在缩小大小时会截断哪些行或列。
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]])
这会从 中删除第 1 列dset
。它通过将第 2 列和第 3 列分别分配给 1 和 2 来实现,然后将数据集缩小一列。交换下标以删除第 1 行。如果您要经常这样做,您可以轻松地为此编写一个包装器。