求助:如何获取Numpy数组中所有最小值的对应索引
解决Numpy数组获取所有最小值索引的问题
嘿,我明白你的需求啦——你想要找出数组里所有最小值的位置,但原来的代码只返回了其中一个,这是因为你用np.unravel_index的时候传错参数啦!np.unravel_index需要的是扁平化数组后的索引值,而不是最小值本身,所以才只拿到了第一个匹配的位置。
下面给你两种简单有效的解决方案:
方法一:用np.where获取索引
np.where可以直接返回所有满足条件的元素的行列索引,非常直观:
import numpy as np a = np.array([[1,2],[1,4]]) minE = np.min(a) # 获取所有等于最小值的索引 rows, cols = np.where(a == minE) # 把索引配对成(行,列)的形式 indices = list(zip(rows, cols)) print("最小值:", minE) print("所有索引:", indices)
运行结果会是:
最小值: 1 所有索引: [(0, 0), (1, 0)]
方法二:用np.argwhere直接得到坐标数组
np.argwhere会直接返回一个二维数组,每一行就是一个最小值的坐标:
import numpy as np a = np.array([[1,2],[1,4]]) minE = np.min(a) indices = np.argwhere(a == minE) print("最小值:", minE) print("所有索引:\n", indices)
运行结果:
最小值: 1 所有索引: [[0 0] [1 0]]
如果需要把这些索引拆成行和列的单独数组,也可以用indices[:,0]拿到所有行索引,indices[:,1]拿到所有列索引。
另外补充一下你原来代码的问题:np.unravel_index(minE, a.shape)这里,minE是1,相当于你在找扁平化数组里第1个元素的位置(索引从0开始),所以得到的是(0,1),这完全不是你想要的结果,以后要注意这个函数的参数要求哦~
内容的提问来源于stack exchange,提问作者ees
相关产品推荐
相关产品推荐

