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



我尝试按降序对数组中的值进行排序。如果我按升序尝试,它可以工作,但是当我按降序尝试时,会出现错误。

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 文档,您不能使用keyreverse关键字参数。您可以按升序对数组进行排序,然后使用[::-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.]])

请注意,这种方法不如能够通过keyreverse=True灵活(也不方便(。 具体而言,如果要对多个列进行排序以中断关系,则此方法将失败。

最新更新