按行降序对 Nd Numpy 数组进行排序

问题描述 投票:0回答:3

我想按行值对以下矩阵进行排序:

a = array([[1, 4, 6],
           [5, 3, 7],
           [8, 4, 1]])

a = array([[6, 4, 1],
           [7, 5, 3],
           [8, 4, 1]])

我可以使用

np.argsort(-a)
获取排序索引,它返回以下索引矩阵:

>>> a_idx = np.argsort(-a)
array([[2, 1, 0],
       [2, 0, 1],
       [0, 1, 2]])

但是使用这些索引来重新排列原始矩阵对我来说并没有发生。

>>> a[a_idx]
array([[[8, 4, 1],
        [5, 3, 7],
        [1, 4, 6]],

       [[8, 4, 1],
        [1, 4, 6],
        [5, 3, 7]],

       [[1, 4, 6],
        [5, 3, 7],
        [8, 4, 1]]])

如何高效地完成这样的任务?提前非常感谢。

python python-3.x numpy sorting
3个回答
3
投票

尝试一下,使用

.take_along_axis()
方法,

>>> a = np.array([[1, 4, 6],
           [5, 3, 7],
           [8, 4, 1]])  
>>> a_idx = np.argsort(-a)

输出:

>>> np.take_along_axis(a, a_idx, axis=1)        
array([[6, 4, 1],
       [7, 5, 3],
       [8, 4, 1]])

1
投票

另一种方法

import numpy as np
a = np.array([[1, 4, 6],
           [5, 3, 7],
           [8, 4, 1]])
print(np.sort(-a,axis=1)*-1)

0
投票
Try this one.
import numpy as np

a = np.array([[1, 4, 6],
              [5, 3, 7],
              [8, 4, 1]])

np.sort(-a)*-1

Out
Array([[6, 4, 1],
       [7, 5, 3],
       [8, 4, 1]])
© www.soinside.com 2019 - 2024. All rights reserved.