numpy argsort,基于另一个排序列

时间:2015-01-23 17:03:15

标签: python numpy

我想根据第一列对数组a进行排序:

import numpy as np

a = np.array([[  1.50000000e+03,   1.68693009e-01],
   [  5.00000000e+02,   1.26512097e-01],
   [  1.50000000e+03,   1.68338907e-01],
   [  5.00000000e+02,   1.22073944e-01],
   [  5.00000000e+02,   1.31257631e-01],
   [  1.50000000e+03,   1.72864036e-01],
   [  1.50000000e+03,   1.70665459e-01],
   [  5.00000000e+02,   1.32951654e-01],
   [  1.00000000e+03,   1.49342105e-01]])
sort = a.T.argsort(0)
b = a[sort]
print(b)

给了我:

[[[  5.00000000e+02   1.26512097e-01]
[  5.00000000e+02   1.26512097e-01]
[  5.00000000e+02   1.26512097e-01]
[  5.00000000e+02   1.26512097e-01]
[  5.00000000e+02   1.26512097e-01]
[  5.00000000e+02   1.26512097e-01]
[  5.00000000e+02   1.26512097e-01]
[  5.00000000e+02   1.26512097e-01]
[  5.00000000e+02   1.26512097e-01]]

[[  1.50000000e+03   1.68693009e-01]
[  1.50000000e+03   1.68693009e-01]
[  1.50000000e+03   1.68693009e-01]
[  1.50000000e+03   1.68693009e-01]
[  1.50000000e+03   1.68693009e-01]
[  1.50000000e+03   1.68693009e-01]
[  1.50000000e+03   1.68693009e-01]
[  1.50000000e+03   1.68693009e-01]
[  1.50000000e+03   1.68693009e-01]]]

我的条目a[:,0] == 1000在哪里?它消失了。我如何生成一个数组,如a_sorted [0] =排序x和a_sorted [1] =排序y?

如果我没有在argsort之前转换a,我会得到一个形状数组(9,2,2)

1 个答案:

答案 0 :(得分:1)

a.sort(0)

根据第一列对数组进行排序(并保持1000):

array([[  5.00000000e+02,   1.22073944e-01],
       [  5.00000000e+02,   1.26512097e-01],
       [  5.00000000e+02,   1.31257631e-01],
       [  5.00000000e+02,   1.32951654e-01],
       [  1.00000000e+03,   1.49342105e-01],
       [  1.50000000e+03,   1.68338907e-01],
       [  1.50000000e+03,   1.68693009e-01],
       [  1.50000000e+03,   1.70665459e-01],
       [  1.50000000e+03,   1.72864036e-01]])

如果您不想就地排序,可以使用:

a[a.argsort(0)[:,0]]