numpy 使用argsort进行排名时忽略NaN值

3bygqnnd  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(479)

我有一个Below函数,它在三维数组中对2D数组的第三列进行排序。

arr[:, :, 3] = arr[:, :, 3].argsort(axis=1)[:, ::-1].argsort(axis=1) + 1

问题是,NaN值也在进行排名,这是不应该发生的。有没有办法在使用argort进行排名时跳过/忽略NaN值?如果不是,还可以用什么其他 numpy 方法?
谢谢。

vmpqdwk3

vmpqdwk31#

我找到了一个解决方法,如下所示:


# Replace NaNs with Negative Infinities

np.nan_to_num(arr, copy=False, nan=-np.inf)

# Rank

arr[:, :, 3] = arr[:, :, 3].argsort(axis=1)[:, ::-1].argsort(axis=1) + 1

# Return NaNs back if needed (replace negative infinities with NaNs)

arr[arr== -np.inf] = np.nan

相关问题