我有一个NaN
数组,其中包含>>> a
array([ 1., -1., nan, 0., nan], dtype=float32)
个值:
>>> numpy.sort(a)
array([ -1., 0., 1., nan, nan], dtype=float32)
>>> numpy.sort(a)[::-1]
array([ nan, nan, 1., 0., -1.], dtype=float32)
我可以按升序或'降序'排序:
NaN
但是,我想要的是降序,最后是>>> numpy.genuine_reverse_sort(a)
array([ 1., 0., -1., nan, nan], dtype=float32)
值,如下所示:
If ActiveCell = "OK" Then
如何实现这一目标?我怀疑没有特别的方法。
答案 0 :(得分: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)
答案 1 :(得分:2)
您可以执行以下操作:
>>> np.concatenate((np.sort(a[~np.isnan(a)])[::-1], [np.nan] * np.isnan(a).sum()))
array([ 1., 0., -1., nan, nan])
使用此片段反向排序输入数组的数字条目,然后使用适当数量的nan
值连接。
答案 2 :(得分:2)
您可以使用np.argpartition
仅对non-NaNs
进行排序,如此 -
a[np.argpartition(-a, np.arange((~np.isnan(a)).sum()) )]
示例运行 -
In [253]: a
Out[253]: array([ 1., -1., nan, 0., nan, 2., 4., -2., -10., nan])
In [254]: a[np.argpartition(-a, np.arange((~np.isnan(a)).sum()) )]
Out[254]: array([ 4., 2., 1., 0., -1., -2., -10., nan, nan, nan])
答案 3 :(得分:0)
两次否定这些值怎么样:
>>> 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])