You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:06:02