3

大きな numpy 配列 (8 x 30000) があり、いくつかの基準に従っていくつかの行を削除したいと考えています。この基準は、1 つの列にのみ適用されます。

例:

>>> p = np.array([[0, 1, 3], [1 , 5, 6], [4, 3, 56], [1, 34, 4]])
>>> p
array([[ 0,  1,  3],
   [ 1,  5,  6],
   [ 4,  3, 56],
   [ 1, 34,  4]])

ここでは、3 番目の列の値が 30 を超えるすべての行を削除したいと思います。ここで3行目。

for配列がかなり大きいので、ループは避けたいと思います。私はこれについて考えました:

>>> a[~(a>30).any(1), :]
array([[0, 1, 3],
   [1, 5, 6]])

しかし、そこには明らかに最後の2行が削除されています。効率的な方法でそれを行う方法についてのアイデアはありますか?

4

1 に答える 1

4
p = p[~(p[:,2] > 30)]

または(あなたの状態が簡単に元に戻せる場合):

p = p[p[:,2] <= 30]

戻り値

array([[ 0,  1,  3],
       [ 1,  5,  6],
       [ 1, 34,  4]])
于 2012-07-25T13:24:05.700 に答える