我有一个形状为(N,2)的二维numpy数组,其中包含N个点(x和y坐标)。例如:
array([[3, 2],
[6, 2],
[3, 6],
[3, 4],
[5, 3]])
我希望对它进行排序,使得我的点按照x坐标的顺序排列,并在x坐标相同时按y坐标排序。因此,上面的数组应该看起来像这样:
array([[3, 2],
[3, 4],
[3, 6],
[5, 3],
[6, 2]])
如果这是一个普通的Python列表,我会简单地定义一个比较器来实现我的目标,但据我所知,numpy的sort函数不接受用户自定义的比较器。有什么想法吗?
编辑:感谢提供的意见!我设置了一个快速测试案例,包含1000000个随机整数点,并对我能运行的进行了基准测试(抱歉,目前无法升级numpy)。
Mine: 4.078 secs
mtrw: 7.046 secs
unutbu: 0.453 secs
lexsort
使用序列中的最后一个条目作为主键,倒数第二个作为次要键等。这让我措手不及。这个答案做得很对,但很容易被忽视。 - LucasBnp.lexsort(a.T[::-1])
- scleronomic