微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决按多列对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]])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。