numpy排序2d:重新排列行而不更改行中的值

时间:2018-07-16 21:27:21

标签: python numpy

如何在不改变每一行值的情况下对数组中的行进行排序? 此外:如何获得这种分类过程的指标?

输入:

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

必需的分拣场

b = np.array([1,4,3,5,2,0])
a = a[b]

输出:

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

如何获取数组b

1 个答案:

答案 0 :(得分:2)

您需要在这里lexsort

b = np.lexsort((a[:, 1], a[:, 0]))
# array([1, 4, 3, 5, 2, 0], dtype=int64)

并应用于您的初始数组:

>>> a[b]
array([[0, 3],
       [1, 2],
       [1, 3],
       [2, 0],
       [3, 0],
       [4, 3]])

@miradulo指出,您还可以使用:

b = np.lexsort(np.fliplr(a).T)

比显式说明要排序的列还不那么冗长。