我想从数组中获取两个最小的值x
。但是当我使用np.where
时:
A,B = np.where(x == x.min())[0:1]
我收到此错误:
值错误:需要 1 个以上的值才能解压缩
如何修复此错误?我是否需要在数组中按升序排列数字?
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
使用 sorted
而不是 np.where
怎么样?
A,B = sorted(x)[:2]
代码中有两个错误。首先是切片在应该[0:2]
的时候[0:1]
。第二个实际上是np.where
的一个非常普遍的问题。如果您查看文档,您会发现它总是返回一个元组,如果您只传递一个参数,则包含一个元素。因此,您必须首先访问元组元素,然后正常索引数组:
A,B = np.where(x == x.min())[0][0:2]
这将为您提供包含最小值的前两个索引。如果不存在两个这样的索引,你将得到一个异常,所以你可能想要检查一下。