我有一个拥有数百列的大型二维数组。我想按字典顺序对它进行排序,即先按第一列排序,然后按第二列排序,直到最后一列。我想这应该很容易做到,但我还没有找到一个快速的方法来实现它。
这就是numpy.lexsort
的用途,但它的接口不太方便。将一个二维数组传递给它,它将对列进行argsort排序,首先按照最后一行,然后是倒数第二行,一直到第一行:
>>> x
array([[0, 0, 0, 2, 3],
[2, 3, 2, 3, 2],
[3, 1, 3, 0, 0],
[3, 1, 1, 3, 1]])
>>> numpy.lexsort(x)
array([4, 1, 2, 3, 0], dtype=int64)
如果你想按行排序,以第一列作为主键,那么在使用lexsort
之前,你需要旋转数组:
>>> x[numpy.lexsort(numpy.rot90(x))]
array([[0, 0, 0, 2, 3],
[2, 3, 2, 3, 2],
[3, 1, 1, 3, 1],
[3, 1, 3, 0, 0]])