我尝试按降序对数组中的值进行排序。如果我按升序尝试,它可以工作,但是当我按降序尝试时,会出现错误。
e = np.array([[5.,3.,8.],[6.,7.,1.],[4.,8.,2.]])
e.sort()
结果:
e = array([[3.,5.,8.],[1.,6.,7.],[2.,4.,8.]])
现在以相反的顺序:
e.sort(reverse=True)
结果:
TypeError: 'reverse' is an invalid keyword argument for this function
我也在from operator import itemgetter
后尝试了e.sort(key=itemgetter(1))
,但出现了相同的错误("反向"被"钥匙"取代(。
为什么会这样呢?为什么它不起作用?为什么会出现此错误(这是使用键或反向右键的方法(?
根据 numpy 文档,您不能使用key
或reverse
关键字参数。您可以按升序对数组进行排序,然后使用[::-1]
片或使用reversed()
视图将其反转。
按升序排列后尝试使用 fliplr https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.fliplr.html#numpy.fliplr
为什么会这样?为什么它不起作用?
仅仅因为 numpy 的排序函数不提供该功能。
"修复"此问题的一种方法是对感兴趣的列进行排序。 然后,您可以反转输出并使用它来索引e
,以便根据需要对项目进行排序:
>>> import numpy as np
>>> e = np.array([[5.,3.,8.],[6.,7.,1.],[4.,8.,2.]])
>>> e
array([[ 5., 3., 8.],
[ 6., 7., 1.],
[ 4., 8., 2.]])
>>> col = 0
>>> idx_asc = np.argsort(e[:, col])
>>> idx_desc = idx_asc[::-1]
>>> e[idx_desc]
array([[ 6., 7., 1.],
[ 5., 3., 8.],
[ 4., 8., 2.]])
请注意,这种方法不如能够通过key
和reverse=True
灵活(也不方便(。 具体而言,如果要对多个列进行排序以中断关系,则此方法将失败。