如何用NumPy获取二维数组中所有最大值的索引?
获取二维NumPy数组所有最大值的索引
嘿,这问题其实很好解决!你现在的代码只提取了第一个最大值的坐标,要拿到所有符合条件的索引,只需要对np.where的结果做个简单的打包处理就行,我给你一步步拆解:
核心思路
- 先确定数组中的最大值:用
pixel.max()就能快速拿到全局最大值 - 定位所有最大值的位置:
np.where(pixel == max_val)会返回两个数组,分别对应所有最大值的行索引和列索引 - 转换成你需要的元组列表格式:用
zip()把行、列索引一一配对,再转成列表就搞定了
完整代码示例
import numpy as np pixel = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 189, 12, 0, 0, 1, 0, 0, 0, 0], [0, 6, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 203, 9, 0], [0, 0, 0, 0, 0, 0, 0, 12, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 5, 245, 0, 0, 0, 7, 4, 0], [0, 0, 0, 0, 0, 0, 0, 250, 8, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) # 1. 获取数组的全局最大值 max_value = pixel.max() # 2. 找到所有等于最大值的行、列索引 row_indices, col_indices = np.where(pixel == max_value) # 3. 打包成[(行, 列)]的列表格式 max_positions = list(zip(row_indices, col_indices)) print("所有最大值的索引:", max_positions) print(pixel)
运行结果
执行这段代码后,你会得到输出:
所有最大值的索引: [(8, 7)]
(因为你的示例数组里只有一个最大值250,要是有多个最大值的话,列表里会自动包含所有对应的坐标元组)
拓展说明
如果是更高维度的数组,这个方法同样适用——np.where会返回对应维度的索引数组,只需要把所有索引数组一起传入zip(),就能得到每个最大值的多维坐标元组啦。
内容的提问来源于stack exchange,提问作者Bakira
相关产品推荐
相关产品推荐

