【问题标题】:Now to remove certain rows from 2d Numpy array when they match a given critera?现在要从 2d Numpy 数组中删除符合给定条件的某些行?
【发布时间】:2021-08-14 03:44:00
【问题描述】:

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

谢谢!

爱德华多

【问题讨论】:

  • 但话虽如此,这样做的 numpy 方式是:arr[(arr[:,[1,3]] != 2).any(1)]
  • @Psidom 哈哈谢谢,太棒了!我在这个工作站上获得了 256GB,但几乎没有使用那么多,因为阵列实际上是 uint8。如果您将其发布为答案,我可以接受 - 再次感谢!

标签: python arrays numpy numpy-ndarray


【解决方案1】:

您可以使用boolean array indexing:即选择第 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]])

【讨论】:

    猜你喜欢
    • 2019-04-30
    • 2022-01-20
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2019-01-07
    • 2014-09-19
    • 2018-12-21
    • 2020-02-13
    相关资源
    最近更新 更多