我有一个像这样的numpy数组:
A = array([[1, 3, 2, 7],
[2, 4, 1, 3],
[6, 1, 2, 3]])
我想按降序对此矩阵的行进行排序,并获取已排序矩阵的参数,如下所示:
As = array([[3, 1, 2, 0],
[1, 3, 0, 2],
[0, 3, 2, 1]])
我做了以下事情:
import numpy
A = numpy.array([[1, 3, 2, 7], [2, 4, 1, 3], [6, 1, 2, 3]])
As = numpy.argsort(A, axis=1)
但是这样会以升序对我进行排序。在花费一些时间在互联网上寻找解决方案后,我期望numpy的argsort
函数中必须存在一个参数可以将排序顺序反转。但是,显然不存在这样的参数!为什么呢!?
有一个名为order
的参数。我尝试了猜测的numpy.argsort(..., order=reverse)
,但它不起作用。
我在这里查找以前问题的解决方案,发现我可以执行以下操作:
import numpy
A = numpy.array([[1, 3, 2, 7], [2, 4, 1, 3], [6, 1, 2, 3]])
As = numpy.argsort(A, axis=1)
As = As[::-1]
由于某些原因,As = As[::-1]
并未给我所需的输出。
嗯,我想这一定很简单,但我还是缺少了什么。
我该如何按降序对一个numpy数组进行排序?
np.argsort(A, axis=1)[:, ::-1]
。只使用[::-1]
会颠倒轴0:你需要颠倒轴1。 - Alex RileyAs
不是A
的排序版本,而是另一个矩阵的排序版本,我的理解是否正确? - SwierA
排序后的参数。@Swier - Ribznp.argsort(-A, axis=1)
和A.shape[1] -1 - np.argsort(A, axis=1)
。 - Divakarsort
或argsort
函数中没有reverse
选项,因为反转数组非常高效(它只改变步幅,不需要复制数据)。通过对-A
进行排序的解决方案可以工作,但这会创建两个新数组而不是一个。对于大型数组来说,这并不是很好。 - Alex Riley