使用 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
上找到很多资料
我正在尝试使用 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
上找到很多资料