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

时间:2013-09-02 23:50:24

标签: python numpy

我对阅读argmin function in numpy的文档感到有点困惑。 它看起来应该做的工作:

阅读本文

  

沿轴返回最小值的索引。

我可能会认为

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

将返回所有索引的数组:[3, 4, 5, 7]

但不是这样,它只返回3。捕获的位置,或者我应该怎么做以获得我的结果?

4 个答案:

答案 0 :(得分:38)

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

>>> 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())

答案 1 :(得分:15)

请参阅numpy.argmax的文档(numpy.argmin的文档引用):

  

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

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

所以,你不能用np.argmin做到这一点。相反,这将起作用:

np.where(arr == arr.min())

答案 2 :(得分:2)

我想快速补充一下,正如用户grofte所述,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]) ,该方法返回一个直接数组。

因此,最干净的版本似乎是

        var resultList = [];
        var dated = new Date('december 2019');
        var endDated = new Date('march 2020');
        var monthNameList = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

        while (dated <= endDated)
        {
            console.log('checking');
            var stringDate = monthNameList[dated.getMonth()] + " " + dated.getFullYear() + " Qist is " + this.state.qistprice;
            resultList.push(stringDate);
            dated.setMonth(dated.getMonth()+1);
        }

答案 3 :(得分:0)

假设您需要列表的索引,而不是numpy数组,请尝试

my_list = [5, 3, 2, 1, 1, 1, 6, 1]
np.where(my_list == min(my_list))[0]

索引[0]是因为numpy返回您的答案的元组,而不返回任何内容(作为numpy数组的答案)。不要问我为什么。