如何用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
相关产品推荐
相关产品推荐

