假设我有一个像这样的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中是否有类似的功能。
答案 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]))])