使用NaN值反向排序Numpy数组

Rom*_*man 8 python arrays numpy

我有一个numpy带有一些NaN值的数组:

>>> a
array([  1.,  -1.,   nan,  0.,  nan], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

我可以按升序或'降序'排序:

>>> numpy.sort(a)
array([ -1.,   0.,   1.,  nan,  nan], dtype=float32)
>>> numpy.sort(a)[::-1]
array([ nan,  nan,   1.,   0.,  -1.], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

但是,我想要的是降序,最后是NaN值,如下所示:

>>> numpy.genuine_reverse_sort(a)
array([ 1.,   0.,   -1.,  nan,  nan], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

怎么可以实现呢?我怀疑没有特别的方法.

Fin*_*sen 6

两次否定这些值怎么样:

>>> a = np.array([2., -1., nan,  0., nan])
>>> np.sort(a)
array([ -1.,   0.,   2.,  nan,  nan])
>>> -np.sort(-a)
array([  2.,   0.,  -1.,  nan,  nan])
Run Code Online (Sandbox Code Playgroud)


xnx*_*xnx 5

我认为你可能是对的 - 没有内置的特殊方法来做到这一点.但是您可以通过将NaN滚动到您想要的位置,按照以下两个步骤执行此操作:

a = np.array([  1.,  -1.,   np.nan,  0.,  np.nan], dtype=np.float32)
sa = np.sort(a)[::-1]
np.roll(sa,-np.count_nonzero(np.isnan(a)))

array([  1.,   0.,  -1.,  nan,  nan], dtype=float32)
Run Code Online (Sandbox Code Playgroud)