首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何返回numpy中的所有最小索引

如何返回numpy中的所有最小索引
EN

Stack Overflow用户
提问于 2013-09-03 07:50:24
回答 4查看 51K关注 0票数 38

在阅读argmin function in numpy的文档时,我有点困惑。看起来它应该可以完成这项工作:

阅读这篇文章

返回轴上的最小值的索引。

我可能会假设

np.argmin([5, 3, 2, 1, 1, 1, 6, 1])

将返回一个包含所有索引的数组:它将为[3, 4, 5, 7]

但是它只返回3,而不是这个。陷阱在哪里,或者我应该怎么做才能得到我的结果?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-03 07:57:07

当您考虑多维数组时,该文档更有意义。

>>> x = numpy.array([[0, 1],
...                  [3, 2]])
>>> x.argmin(axis=0)
array([0, 0])
>>> x.argmin(axis=1)
array([0, 1])

如果指定了轴,argmin将获取沿给定轴的一维子数组,并返回每个子数组的最小值的第一个索引。它不会返回单个最小值的所有索引。

要获取最小值的所有索引,您可以这样做

numpy.where(x == x.min())
票数 57
EN

Stack Overflow用户

发布于 2013-09-03 07:56:55

请参阅numpy.argmax文档(numpy.argmin文档中引用了该文档):

如果最大值多次出现,则返回第一次出现的索引。

文档的措辞(“索引”而不是“索引”)指的是提供axis时的多维情况。

所以,你不能用np.argmin做到这一点。取而代之的是,这将起作用:

np.where(arr == arr.min())
票数 21
EN

Stack Overflow用户

发布于 2020-01-27 20:49:05

我想快速补充一下,就像用户grofte提到的,np.where返回一个元组,它声明它是nonzero的简写,它有一个对应的方法flatnonzero,它直接返回一个数组。

所以,最干净的版本似乎是

my_list = np.array([5, 3, 2, 1, 1, 1, 6, 1])
np.flatnonzero(my_list == my_list.min())
=> array([3, 4, 5, 7])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18582178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档