【发布时间】: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