现在要从 2d Numpy 数组中删除符合给定条件的某些行?

Now to remove certain rows from 2d Numpy array when they match a given critera?

我有一个非常大的二维 Numpy 数组(只有几列,但有数十亿行)。随着程序的运行,我得到了更多,生成了数千个。

对于每一个,我想删除在特定位置包含特定值的所有行。例如,如果我有:

arr = np.array([
    [10, 1, 1, 1],
    [1, 2, 1, 2],
    [1, 2, 1, 2],
    [3, 1, 1, 1],
    [2, 2, 1, 2]
    [3, 4, 2, 7],
    [3, 2, 1, 9],
    [3, 2, 2, 2],
]),

我想删除位置 1 和位置 3 上包含值 2 的所有行,这样我最终会得到:

print(arr)
>>> ([
    [10, 1, 1, 1],
    [3, 1, 1, 2],
    [3, 4, 2, 7],
    [3, 2, 1, 9],
]),

因为我有这么大的二维数组,而且其中有很多,我试图通过 Numpy 调用来做到这一点,以便它在 C 中运行,而不是在 Python 中迭代和选择行,这是慢得多。

有没有 Numpy 的方法来完成这个?

谢谢!

爱德华多

您可以使用 boolean array indexing:即 select 第 2 列和第 4 列,然后检查是否并非所有列都等于 2:

arr[(arr[:, [1,3]] != 2).any(1)]
array([[10,  1,  1,  1],
       [ 3,  1,  1,  1],
       [ 3,  4,  2,  7],
       [ 3,  2,  1,  9]])