Gok*_*kul 6 python sorting numpy python-3.x numpy-ndarray
我有一个包含大约 4900 万个项目 (7000*7000) 的大型数组,在其中我需要找到最大的 N 个项目及其索引,忽略所有 NaN。我无法事先删除这些 NaN,因为我需要第一个数组中最大 N 个项目的索引值,以便从另一个数组中提取数据,该另一个数组与第一个数组相比,在不同的索引中具有 NaN。我试过
np.argpartition(first_array, -N)[-N:]
这对于没有 NaN 的数组非常有效,但如果有 NaN,则 nan 将作为最大的项,因为它在 python 中被视为无穷大。
x = np.array([np.nan, 2, -1, 2, -4, -8, -9, 6, -3]).reshape(3, 3)
y = np.argpartition(x.ravel() , -3)[-3:]
z = x.ravel()[y]
# this is the result I am getting === [2, 6, nan]
# but I need this ==== [2, 2, 6]
Run Code Online (Sandbox Code Playgroud)
使用 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.]))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |