我有一个包含数百列的大型二维数组。我想按字典顺序对它进行排序,即按第一列,然后按第二列,依此类推,直到最后一列。我想这应该很容易做到,但我一直无法找到一种快速的方法来做到这一点。
最佳答案
这就是numpy.lexsort
是为了,但是界面别扭。传递给它一个二维数组,它会对列进行参数排序,首先按最后行排序,然后是倒数第二行,一直到第一行:
>>> 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]])
关于python - 按字典顺序对 2d numpy 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38277143/