问题描述
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]])