我想知道如何通过其中一列中的值对整个数组进行排序。
我有:
array([5,2,8,2,4])
和
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
我想将第一个数组附加到第二个数组,如下所示:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24],
[5, 2, 8, 2, 4]])
然后按附加行对数组进行排序,得到以下结果:
array([[1, 3, 4, 0, 2],
[6, 8, 9, 5, 7],
[11, 13, 14, 10, 12],
[16, 18, 19, 15, 17],
[21, 23, 24, 20, 22],
[2, 2, 4, 5, 8]])
或者这个:
array([[ 2, 1, 3, 4, 0],
[ 7, 6, 8, 9, 5],
[12, 11, 13, 14, 10],
[17, 16, 18, 19, 15],
[22, 21, 23, 24, 20],
[ 8, 5, 4, 2, 2]])
然后删除附加的列以获取:
array([[1, 3, 4, 0, 2],
[6, 8, 9, 5, 7],
[11, 13, 14, 10, 12],
[16, 18, 19, 15, 17],
[21, 23, 24, 20, 22]])
或:
array([[ 2, 1, 3, 4, 0],
[ 7, 6, 8, 9, 5],
[12, 11, 13, 14, 10],
[17, 16, 18, 19, 15],
[22, 21, 23, 24, 20]])
是否有执行此过程的代码。我是python的新手。非常感谢!
答案 0 :(得分:9)
您可以使用numpy.argsort获取包含数组排序索引的列表。然后使用它可以重新排列矩阵的列。
import numpy as np
c = np.array([5,2,8,2,4])
a = np.array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
i = np.argsort(c)
a = a[:,i]
答案 1 :(得分:0)
你不需要numpy这样做; (虽然如果你使用numpy,你可以使用数组类的.transpose()
方法。
这基本上是做什么的,将你的数组转换为array[column][row]
,然后获取每一列,并将它们与你在元组列表中提供的sortKeys配对({{1} }位)。然后它对这个元组列表进行排序。默认情况下,根据排序元组的第一个值排序,然后排序第二个值,然后排序第三个,等等。现在按顺序排列。
然后zip(sortKeys, a)
只提取列并创建新数组,仍然采用aNew = [...]
格式,然后再次转置。
array[column][row]