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



我想从数组中获取两个最小的值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]

这将为您提供包含最小值的前两个索引。如果不存在两个这样的索引,你将得到一个异常,所以你可能想要检查一下。

最新更新