python - 现在要从 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 的方法来完成这个?
谢谢!
爱德华多
解决方案
您可以使用布尔数组索引:即选择第 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]])
推荐阅读
- angular - Angular 8 通用窗口未定义
- java - REST API - “存在于”的最佳实践
- flutter - 不同页面之间的ChangeNotifierProvider
- python - 在 pandas 数据帧上并行调用函数
- list - 如何从地图键创建列表
- postgresql - Kafka Connect 自动从 Debezium 主题中提取主键
- performance - -XX:-UseContainerSupport 和 -XX:MaxRAMPercentage 是否会自动计算其他 JVM 资源大小?
- deep-learning - 为什么 GAN(生成对抗网络)被称为“隐式”生成网络?
- c# - 从 Azure SAS URI 创建 BlobContainerClient
- reactjs - 单击另一个 div 时删除活动状态