对数组中的值进行排序:'reverse'是此函数的无效关键字参数

时间:2017-08-17 14:14:08

标签: python arrays python-3.x sorting

我尝试按降序对数组中的值进行排序。如果我按升序尝试它,它会起作用,但是当我按下降时,我会收到错误。

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,但出现了相同的错误('反向'被'键'替换)。

为什么会这样?为什么不起作用?为什么会出现此错误(这是使用键或右键的方式)?

3 个答案:

答案 0 :(得分:0)

答案 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.]])

请注意,与传递keyreverse=True相比,此方法不够灵活(也不太方便)。具体来说,如果要对多个列进行排序以断开关系,则此方法将失败。

答案 2 :(得分:0)

根据numpy documentation,您无法使用keyreverse关键字参数。您可以按升序对数组进行排序,然后使用[::-1]切片将其反转,或使用reversed()视图。