如何使用特定列索引对numpy 2D数组行进行降序或升序排序

时间:2016-08-07 15:40:41

标签: python sorting numpy

假设我有一个像这样的numpy 2D数组:

a = np.array([[3,6,7],[1,9,4],[ 3,7,8],[2,5,10]])
a
# array([[ 3,  6,  7],
#       [ 1,  9,  4],
#       [ 3,  7,  8],
#       [ 2,  5, 10]])

我需要根据第一列降序排序,然后在第二列升序,以获得以下结果:

array([[ 3,  6,  7],
       [ 3,  7,  8],
       [ 2,  5,  10],
       [ 1,  9, 4]])

使用sortrows(my_matrix,[ - 1 2])在Matlab中执行此操作非常简单,其中第一列的降序为-1,第二列的升序为2.

我想知道numpy中是否有类似的功能。

2 个答案:

答案 0 :(得分:1)

如果您愿意使用pandas,可以将列表传递到ascending关键字以控制每个字段的排序顺序:

>>> pd.DataFrame(a).sort_values([0,1], ascending=[False, True])

   0  1   2
0  3  6   7
2  2  5  10
1  1  9   4

答案 1 :(得分:1)

以下是使用numpy_indexed软件包执行此操作的方法:

import numpy_indexed as npi
print(a[npi.argsort((a[:,1], -a[:,0]))])