按降序对Nd Numpy数组排序

ecr0jaav  于 2023-11-18  发布在  其他
关注(0)|答案(2)|浏览(122)

我想按行值对下面的矩阵排序:

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]]])


如何有效地完成这样一个任务?提前感谢。

zsohkypk

zsohkypk1#

试试这个,使用.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]])

hc8w905p

hc8w905p2#

另一种方法

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

字符串

相关问题