Python 使用numpy.argpartition忽略NAN

Python 使用numpy.argpartition忽略NAN,python,python-3.x,numpy,sorting,numpy-ndarray,Python,Python 3.x,Numpy,Sorting,Numpy Ndarray,我有一个大约4900万项(7000*7000)的大型数组,在其中我需要找到最大的N项及其索引,忽略所有的NaN。我不能先删除这些NAN,因为我需要第一个数组中最大的N个项的索引值,以便从另一个数组中提取数据,与第一个数组相比,另一个数组中的NAN具有不同的索引。我试过了 np.argpartition(第一个数组,-N)[-N:] 这对于没有nan的数组非常有效,但是如果有nan,nan将成为最大的项,因为在python中它被认为是无限的 x=np.array([np.nan,2,-1,2,-4

我有一个大约4900万项(7000*7000)的大型数组,在其中我需要找到最大的N项及其索引,忽略所有的NaN。我不能先删除这些NAN,因为我需要第一个数组中最大的N个项的索引值,以便从另一个数组中提取数据,与第一个数组相比,另一个数组中的NAN具有不同的索引。我试过了

np.argpartition(第一个数组,-N)[-N:]

这对于没有nan的数组非常有效,但是如果有nan,nan将成为最大的项,因为在python中它被认为是无限的

x=np.array([np.nan,2,-1,2,-4,-8,-9,6,-3])。重塑(3,3)
y=np.argpartition(x.ravel(),-3)[-3:]
z=x.ravel()[y]
#这是我得到的结果==[2,6,nan]
#但我需要这个

使用NAN计数进行偏移,从而计算索引并提取值-

In [200]: N = 3

In [201]: c = np.isnan(x).sum()

In [204]: idx = np.argpartition(x.ravel() , -N-c)[-N-c:-c]

In [207]: val = x.flat[idx]

In [208]: idx,val
Out[208]: (array([1, 3, 7]), array([2., 2., 6.]))

检查
np.nanargmax