如何从Numpy二维坐标数组中定位指定坐标的位置?
解决二维NumPy数组筛选特定坐标的问题
这里提供两种简洁的方法来实现你的需求:
方法一:利用广播与数组维度操作
通过NumPy的广播特性,批量比较每个测试坐标与所有特定坐标是否完全匹配:
import numpy as np values_to_test = np.array([[1 , 0],[2 , 0],[2 , 0.5],[1 , 0.5],[0 , 0],[2 , 1], [0 , 0.5],[1 , 1],[0 , 1]]) specific_values = np.array([[1,0],[0,0],[1,1]]) # 广播后逐行比较是否完全匹配,再取任意匹配结果 match_result = (values_to_test[:, None, :] == specific_values).all(axis=2).any(axis=1) print(match_result) # 输出:[ True False False False True False False True False]
代码说明:
values_to_test[:, None, :]将原数组的形状从(9,2)转换为(9,1,2),实现和specific_values(形状(3,2))的广播对齐.all(axis=2)检查每个坐标对的所有元素是否完全相等,得到形状为(9,3)的布尔数组,每一行对应测试坐标与3个特定坐标的匹配情况.any(axis=1)对每一行取逻辑或,只要当前测试坐标匹配任意一个特定坐标,结果就为True
方法二:转换为元组后使用np.isin
将二维数组的每个子坐标转换为元组,再利用np.isin进行成员判断,逻辑更直观:
import numpy as np values_to_test = np.array([[1 , 0],[2 , 0],[2 , 0.5],[1 , 0.5],[0 , 0],[2 , 1], [0 , 0.5],[1 , 1],[0 , 1]]) specific_values = np.array([[1,0],[0,0],[1,1]]) # 将数组元素转为元组 test_tuples = [tuple(coord) for coord in values_to_test] specific_tuples = [tuple(coord) for coord in specific_values] # 直接判断成员关系 match_result = np.isin(test_tuples, specific_tuples) print(match_result) # 输出:[ True False False False True False False True False]
内容的提问来源于stack exchange,提问作者Charith
相关产品推荐
相关产品推荐

