python - 如何匹配两个numpy数组中包含的值对
问题描述
我有两组坐标,想找出该组的哪些坐标与该coo
组中的任何坐标相同targets
。我想知道coo
集合中的索引,这意味着我想获取索引或布尔列表。
import numpy as np
coo = np.array([[1,2],[1,6],[5,3],[3,6]]) # coordinates
targets = np.array([[5,3],[1,6]]) # coordinates of targets
print(np.isin(coo,targets))
[[ True False]
[ True True]
[ True True]
[ True True]]
期望的结果将是以下两种之一:
[False True True False] # bool list
[1,2] # list of concerning indices
我的问题是,那...
np.isin
没有axis
- 属性,所以我可以使用axis=1
.- 即使对输出的每一行应用逻辑和也会返回
True
最后一个元素,这是错误的。
我知道循环和条件,但我确信 Python 配备了更优雅的解决方案。
解决方案
对于大型阵列,此解决方案的扩展性会更差,在这种情况下,其他建议的答案会表现得更好。
这是利用的一种方法broadcasting
:
(coo[:,None] == targets).all(2).any(1)
# array([False, True, True, False])
细节
通过添加第一个轴的直接比较来检查每一行coo
是否与另一行匹配,以便它可以广播:target
coo
targets
(coo[:,None] == targets)
array([[[False, False],
[ True, False]],
[[False, False],
[ True, True]],
[[ True, True],
[False, False]],
[[False, False],
[False, True]]])
然后检查ndarrays
沿第二个轴的all
值True
:
(coo[:,None] == targets).all(2)
array([[False, False],
[False, True],
[ True, False],
[False, False]])
最后用于any
检查哪些行至少有一个True
.
推荐阅读
- java - Tomcat在部署战争时卡住了
- python - 在 python 脚本中修复“TypeError:'_io.TextIOWrapper' 对象不可下标”
- time - BFS 和 DFS 的时间和空间复杂度,在 AdjacencyMatrix 和 AdjacencyList 中的 Graph 上
- amazon-web-services - AppSync - creating nested mutation with array and objects?
- tensorflow - Out Of Memory when running multi-gpu cnn with TensorFlow
- ssl - Is this a valid Set-Cookie syntax
- bash - Is there a way to delete json files produced by protractor cucumber on Jenkins when using protractor flake?
- ruby-on-rails - 在 Rails 3.2 中公开开发和生产中的资产
- encryption - 仅显示特定客户的解密字符串
- python - Save a pandas dataframe with a column with 2d arrays as a parquet file in python