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