使用NumPy进行2D排序 - 排序1行,让另一行按照排序进行排序

时间:2011-10-26 08:11:58

标签: python sorting numpy scipy

说我有一个NumPy数组:

[[4 9 2]
 [5 1 3]]

我想对这个数组的最后一行进行排序,但是排在第一行的是排序,这样我得到:

[[9 2 4]
 [1 3 5]]

我知道您可以使用sorted()函数进行排序,但这需要输入和输出列表。

有什么想法吗?非常感谢!

2 个答案:

答案 0 :(得分:11)

import numpy as np
a = np.array([[4,9,2],[5,1,3]])
idx = np.argsort(a[1])

现在您可以使用idx索引数组:

b=a[:,idx]

答案 1 :(得分:1)

我能想到的唯一(高效)解决方案需要原始数组的副本。

import numpy as np
a = np.array([[4,9,2],[5,1,3]])
idx = np.argsort(a[1])

因此,idx排序列的索引。

c = a.copy()
for i in range(len(idx)):
  a[:,i] = c[:,idx[i]]

这应该相当快,但当然会浪费一些记忆。