按字典顺序排序2d numpy数组

时间:2016-07-09 00:39:09

标签: python sorting numpy

我有一个包含数百列的大型2d数组。我想按字典顺序排序,即按第一列,然后按第二列,依此类推,直到最后一列。我想这应该很容易,但我还没有找到一个快速的方法来做到这一点。

1 个答案:

答案 0 :(得分:7)

这是numpy.lexsort的用途,但界面很笨拙。将它传递给一个2D数组,然后它将导致,首先按 last 行排序,然后排在倒数第二行,继续到第一行:

>>> 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]])