在Python中获取数组的三个最小值,忽略一个值

时间:2014-10-24 09:50:25

标签: python arrays numpy

如果我有以下数组: a = [4, -5, 10, 4, 4, 4, 0, 4, 4]

要获得三个最小值索引:

a1 = np.array(a) 
print a1.argsort()[:3]

这输出以下内容,即可:

  

[1 6 0]

问题在于这包括-5(索引1)。

我怎么能做到这一点但忽略了数组的-5

2 个答案:

答案 0 :(得分:2)

如果你正在寻找排除最小元素,你可以在切片时跳过元素:

>>> a = [4, 3, 10, -5, 4, 4, 4, 0, 4, 4]
>>> a1 = np.array(a) 
>>> minimum_indexes= a1.argsort()[1:4]
>>> print a1[minimum_indexes]
[0 3 4]

答案 1 :(得分:2)

您可以在argsort之后过滤掉您的具体数字:

>>> a = [4, -5, 10, 4, 4, 4, 0, 4, 4]
>>> a1 = np.array(a) 
>>> indices = a1.argsort()
>>> indices = indices[a1[indices] != -5]
>>> print(indices[:3])
[6 0 3]

很容易改变你的状况。例如,如果您要过滤掉所有否定号码,请改用以下行:

>>> indices = indices[a1[indices] >= 0]