如何从numpy数组中获取两个最小值

时间:2017-05-16 13:01:39

标签: python arrays numpy

我想从数组x中取两个最小的值。但是当我使用np.where时:

A,B = np.where(x == x.min())[0:1]

我收到此错误:

  

ValueError:解包需要多于1个值

如何修复此错误?我是否需要在数组中按升序排列数字?

3 个答案:

答案 0 :(得分:4)

您可以使用numpy.partition获取最低k+1项:

A, B = np.partition(x, 1)[0:2]  # k=1, so the first two are the smallest items

在Python 3.x中你也可以使用:

A, B, *_ = np.partition(x, 1)

例如:

import numpy as np
x = np.array([5, 3, 1, 2, 6])
A, B = np.partition(x, 1)[0:2]
print(A)  # 1
print(B)  # 2

答案 1 :(得分:1)

如何使用sorted代替np.where

A,B = sorted(x)[:2]

答案 2 :(得分:1)

代码中有两个错误。第一个是切片为[0:1]时应为[0:2]。第二个问题实际上是np.where的一个非常常见的问题。如果您查看the documentation,您将看到它总是返回一个元组,如果您只传递一个参数,则返回一个元素。因此,您必须首先访问元组元素,然后正常索引数组:

A,B = np.where(x == x.min())[0][0:2]

这将为您提供包含最小值的两个第一个索引。如果不存在两个这样的索引,则会出现异常,因此您可能需要检查它。