现在要从 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]])
我有一个非常大的二维 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]])