Python中如何使用np.where()获取二维数组满足多条件的元素坐标
问题原因
原代码报错/结果不符合预期的核心原因是:第一次通过np.where(a>10)得到的y、x是长度为4的一维索引数组,执行b[y, x] > c[y, x]得到的是长度为4的一维布尔数组,此时再用np.where得到的索引是对应这个一维数组的位置,而非原5×3二维数组的坐标,无法直接映射回原数组位置。
正确实现方案
共有两种常用实现方式:
方式1:分步过滤(符合你需求的分步逻辑)
import numpy as np a = np.arange(15).reshape(5, 3) b = np.arange(15).reshape(5, 3) c = np.arange(10, 25).reshape(5, 3) c[4, 0] = 1 c[4, 1] = 1 # 第一步:获取a中元素大于10的所有坐标 y0, x0 = np.where(a > 10) # 第二步:在上述坐标位置对比b和c的元素值,得到符合条件的掩码 mask = b[y0, x0] > c[y0, x0] # 第三步:用掩码过滤得到最终坐标 res_coords = list(zip(y0[mask], x0[mask])) print(res_coords)
方式2:组合条件一步到位
利用numpy数组的广播特性,直接组合两个判断条件,一步拿到符合要求的原数组坐标:
y, x = np.where((a > 10) & (b > c)) res_coords = list(zip(y, x)) print(res_coords)
输出结果
两种方式的输出均为[(4, 0), (4, 1)],完全匹配需求。
内容的提问来源于stack exchange,提问作者John B
相关产品推荐
相关产品推荐

