使用 python 中的 numpy.argsort 对列表的每一列进行排序

Sort each column of a list using numpy.argsort in python

我正在尝试使用 numpy.argsort 对列表的每一列进行排序。但是,我得到的输出与正确的排序不匹配。我要排序的列表名称是 "CD"。 下面,我提供了我目前使用的代码和不正确的输出。

print(numpy.argsort(CD,axis=0))

CD列表如下。

[[90, 85, 71, 48], 
[28, 75, 2, 71], 
[5, 93, 15, 56], 
[59, 91, 29, 43], 
[28, 24, 82, 35], 
[13, 102, 77, 21], 
[85, 102, 33, 64], 
[80, 66, 64, 30], 
[91, 78, 41, 1], 
[77, 33, 30, 50]]

输出为

[[2 4 1 8]
 [5 9 2 5]
 [1 7 3 7]
 [4 1 9 4]
 [3 8 6 3]
 [9 0 8 0]
 [7 3 7 9]
 [6 2 0 2]
 [0 5 5 6]
 [8 6 4 1]]

如果您能指出可能出现的问题,我将不胜感激。

编辑

我想获取排序列的索引。不是实际数字。很抱歉没有首先清除它

numpy.argsort returns排序数组的索引

我觉得你想要的是numpy.sort

print(numpy.sort(CD,axis=0))
# [[  5  24   2   1]
#  [ 13  33  15  21]
#  [ 28  66  29  30]
#  [ 28  75  30  35]
#  [ 59  78  33  43]
#  [ 77  85  41  48]
#  [ 80  91  64  50]
#  [ 85  93  71  56]
#  [ 90 102  77  64]
#  [ 91 102  82  71]]

也许您只想 sort(Return 数组的排序副本)数组而不是 argsort(Returns 排序索引数组)?

np.sort(cd, axis=1)
#array([[ 48,  71,  85,  90],
#       [  2,  28,  71,  75],
#       [  5,  15,  56,  93],
#       [ 29,  43,  59,  91],
#       [ 24,  28,  35,  82],
#       [ 13,  21,  77, 102],
#       [ 33,  64,  85, 102],
#       [ 30,  64,  66,  80],
#       [  1,  41,  78,  91],
#       [ 30,  33,  50,  77]])
np.sort(cd, axis=0)
#array([[  5,  24,   2,   1],
#       [ 13,  33,  15,  21],
#       [ 28,  66,  29,  30],
#       [ 28,  75,  30,  35],
#       [ 59,  78,  33,  43],
#       [ 77,  85,  41,  48],
#       [ 80,  91,  64,  50],
#       [ 85,  93,  71,  56],
#       [ 90, 102,  77,  64],
#       [ 91, 102,  82,  71]])

获得所需内容的有效(但缓慢)方法:

np.argsort(np.argsort(x, axis = 0), axis = 0)
Out[]: 
array([[8, 5, 7, 5],
       [2, 3, 0, 9],
       [0, 7, 1, 7],
       [4, 6, 2, 4],
       [3, 0, 9, 3],
       [1, 8, 8, 1],
       [7, 9, 4, 8],
       [6, 2, 6, 2],
       [9, 4, 5, 0],
       [5, 1, 3, 6]], dtype=int64)

你要的其实是一个inverse argsort,你可以在here

上找到很多资料