python - 按字典顺序对 2d numpy 数组进行排序

标签 python sorting numpy

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

最佳答案

这就是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/

相关文章:

python - 订阅中资源的 Azure 使用情况和成本

javascript - 按字符串值排序并打印成 HTML

python - 如何使用 pydicom 访问 DICOMDIR 文件中的单个 NumPy 数组?

Python 退出代码未在 control-m 中捕获

python - 与图像碰撞

python - 使用过滤器获取多个用户对象

linux - 仅使用 k1,1 执行排序

java - 基本的插入排序优化使代码变慢

Python:Pandas Dataframe 如果 ColA 为空且 ColB 包含字符串,则新列显示字符串

python - 根据条件从现有数据框创建新数据框