我尝试按降序对数组中的值进行排序。如果我按升序尝试它,它会起作用,但是当我按下降时,我会收到错误。
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
我在e.sort(key=itemgetter(1))
后尝试了from operator import itemgetter
,但出现了相同的错误('反向'被'键'替换)。
为什么会这样?为什么不起作用?为什么会出现此错误(这是使用键或右键的方式)?
答案 0 :(得分:0)
尝试按升序排列后使用fliplr https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.fliplr.html#numpy.fliplr
答案 1 :(得分:0)
为什么会这样?为什么不起作用?
仅仅因为numpy's sort功能不提供该功能。
“修复”此问题的一种方法是在感兴趣的列上进行argsort。然后,您可以反转输出并使用它来索引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
相比,此方法不够灵活(也不太方便)。具体来说,如果要对多个列进行排序以断开关系,则此方法将失败。
答案 2 :(得分:0)
根据numpy documentation,您无法使用key
或reverse
关键字参数。您可以按升序对数组进行排序,然后使用[::-1]
切片将其反转,或使用reversed()
视图。