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

如何用numpy.where查找二维数组中最值的行和列索引

二维掩码数组最值位置查找方法

你遇到的问题是因为ma.where()返回的是包含两个数组的元组(分别对应所有符合条件的行索引和列索引),直接当成单个数值解包会报错。下面给两种简便解决方法:

方法1:用argmin() + unravel_index(推荐,最值唯一时用)

先获取最小值的一维扁平化索引,再转换为二维行列坐标:

import numpy as np
import numpy.ma as ma

# 假设dist1是二维掩码数组
min_idx = dist1.argmin()  # 自动忽略掩码值,返回最小值的一维索引
imin1, jmin1 = np.unravel_index(min_idx, dist1.shape)  # 转成二维行列坐标

找最大值的话,把argmin()换成argmax()即可。

方法2:直接处理ma.where()的结果(支持多个最值位置)

如果数组中有多个相同的最小值,这个方法能获取所有对应位置:

rows, cols = ma.where(dist1 == dist1.min())
# 取第一个最值的行列坐标
imin1, jmin1 = rows[0], cols[0]
# 若要所有最值位置,直接使用rows和cols数组即可

补充说明

你之前解包报错,是因为ma.where()返回的每个元素是索引数组而非单个数值。比如当只有一个最小值时,rows是[x]这样的数组,直接赋值给变量得到的是数组,而非单个整数,需要通过[0]提取具体数值。

内容的提问来源于stack exchange,提问作者Fdez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:24:56