首页 > 解决方案 > 现在要从 2d Numpy 数组中删除与给定条件匹配的某些行?

问题描述

我有一个非常大的二维 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 的方法来完成这个?

谢谢!

爱德华多

标签: pythonarraysnumpynumpy-ndarray

解决方案


您可以使用布尔数组索引:即选择第 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]])

推荐阅读