我想从数组x
中取两个最小的值。但是当我使用np.where
时:
A,B = np.where(x == x.min())[0:1]
我收到此错误:
ValueError:解包需要多于1个值
如何修复此错误?我是否需要在数组中按升序排列数字?
答案 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]
这将为您提供包含最小值的两个第一个索引。如果不存在两个这样的索引,则会出现异常,因此您可能需要检查它。