从numpy数组中获取最小的N值,忽略inf和nan

jef*_*ind 7 python arrays math numpy

我需要一个好的,快速的方法来从一个可能具有任意多个nan和/或inf值的numpy数组中找到10个最小的实数值.

我需要确定这些最小实际值的索引,而不是值本身.

我从numpy 找到了argminnanargmin函数.他们并没有真正完成工作,因为我还想指定多于1个值,例如我想要最小的100个值.此外,它们都将-inf值返回为数组中存在的最小值.

heapq.nsmallest一种工作,但它也返回nan-inf值作为最小值.它也没有给我我正在寻找的指数.

这里的任何帮助将不胜感激.

YXD*_*YXD 11

应该抛出的唯一值是负无限值.所以尝试:

import numpy as np
a = np.random.rand(20)
a[4] = -np.inf
k = 10
a[np.isneginf(a)] = inf
result = a[np.argsort(a)[:k]]
Run Code Online (Sandbox Code Playgroud)

  • 如果需要,可以避免修改原始数组.只是无条件地排序,然后将结果限制为有限值:`i = np.argsort(a); result = i [np.isfinite(a [i])] [:10]` (2认同)