按多列对numpy 2d数组进行排序

问题描述

我有一个看起来像这样的 2D numpy 数组

array([[5,0],[3,1],[7,[2,1]])

我想(子)按每列(从右到左说)排序来得到这个:

array([[5,1]])

我怎样才能在 numpy 中做到这一点?

解决方法

Numpy 包含一个用于按列进行子排序的本机函数,lexsort

idx = np.lexsort((arr[:,0],arr[:,1]))
arr_sorted = arr[idx]

或者,如果您更熟悉,也可以使用 Pandas 语法;这将有一些内存/时间开销,但对于

arr = [
    [5,[3,1],[7,[2,1]
]
df = pd.DataFrame(data=arr).sort_values([1,0])
arr_sorted = df.to_numpy()

输出(两者):

array([[5,1]])
,

您可以使用 np.lexsort 对多列的数组进行排序:

idx = np.lexsort((a[:,a[:,1]))

a[idx]

输出:

array([[5,1]])