Numpy 先基于一列,然后基于第二列对数组进行排序
我想基于一列对数组进行排序,然后对于所有相等的列值,基于第二列对它们进行排序。例如:假设我有一个数组:Numpy 先基于一列,然后基于第二列对数组进行排序,numpy,sorting,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],[
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]])
实现这一目标的最佳方式是什么?谢谢。您可以将它们排序为
元组
,然后转换回numpy数组:
out = np.array(sorted(map(tuple,a)))
输出:
array([[0, 1, 1],
[0, 2, 1],
[0, 3, 1],
[1, 7, 2]])
首先在次列中对数组进行排序,然后在主轴中进行排序,确保使用稳定的排序方法
sorted_array=a[np.argsort(a[:,1])]
排序的数组=排序的数组[np.argsort(排序的数组[:,0],kind='stable')]
或者你可以使用
sorted_array=a[np.lexsort((a[:,1],a[:,0]),:]