基于一列对数组进行排序,然后基于第二列

时间:2021-05-19 20:44:18

标签: numpy sorting

我想根据一列对数组进行排序,然后对于所有相等的列值 - 根据第二列对它们进行排序。例如:假设我有数组:

a = np.array([[0,1,1],[0,3,1],[1,7,2],[0,2,1]])

我可以使用以下方法按第 0 列对其进行排序:

sorted_array = a[np.argsort(a[:, 0])]

但是,我希望 [0] 列具有相似值的行按 [1] 列排序,因此我的结果如下所示:

desired_result = np.array([[0,1,1],[0,2,1],[0,3,1],[1,7,2]])

实现这一目标的最佳方法是什么?谢谢。

2 个答案:

答案 0 :(得分:1)

您可以将它们排序为 tuple,然后转换回 numpy 数组:

out = np.array(sorted(map(tuple,a)))

输出:

array([[0, 1, 1],
       [0, 2, 1],
       [0, 3, 1],
       [1, 7, 2]])

答案 1 :(得分:0)

您首先在辅助列中对数组进行排序,然后在主轴中进行排序,确保使用稳定的排序方法。

sorted_array = a[np.argsort(a[:, 1])]
sorted_array = sorted_array[np.argsort(sorted_array[:, 0], kind='stable')]

或者您可以使用 lexsort

sorted_array = a[np.lexsort((a[:,1], a[:, 0])), :]