我正在尝试按numpy的整个行对2d数组进行排序:也就是说,每行中的元素应在该行中按其顺序保留,但是整个行本身可以与另一行交换。对于每一行,它们的顺序由其元素确定:遍历每个元素,如果第1行中的ith元素与第2行相同,则查看ith + 1元素。否则,采用第ith个元素较小的行。 :
import numpy as np
a = array([[1,2,3,4],
[0,3,4,5],
[1,2,4,5],
[0,2,4,5],])
返回:
[[0,2,4,5],
[0,3,4,5],
[1,2,3,4],
[1,2,4,5]]
是否有一个预建的numpy函数可以做到这一点?
答案 0 :(得分:1)
有np.lexsort
。将a
的列(作为行,因此是a.T
)作为排序键,注意最后一个键定义了主要的排序顺序(因此用a.T[::-1]
反转键):
>>> a[np.lexsort(a.T[::-1])]
array([[0, 2, 4, 5],
[0, 3, 4, 5],
[1, 2, 3, 4],
[1, 2, 4, 5]])