Python 使用numpy.argpartition忽略NAN
我有一个大约4900万项(7000*7000)的大型数组,在其中我需要找到最大的N项及其索引,忽略所有的NaN。我不能先删除这些NAN,因为我需要第一个数组中最大的N个项的索引值,以便从另一个数组中提取数据,与第一个数组相比,另一个数组中的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
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