基于最后一列值的numpy排序数组[重复]

Posted

技术标签:

【中文标题】基于最后一列值的numpy排序数组[重复]【英文标题】:numpy sort arrays based on last column values [duplicate] 【发布时间】:2018-11-25 12:41:40 【问题描述】:
import numpy as np

a = np.array([[5,9,44],
              [5,12,43],
              [5,33,11]])

b = np.sort(a,axis=0)

print(b) #not well

# [[ 5  9 11]
# [ 5 12 43]
# [ 5 33 44]]

#desired output:

#[[5,33,11],
# [5,12,43],
# [5,9,44]]

什么 numpy 排序完全改变了行(当然基于从低到高),但我想保持行不变。我想根据最后一列的值对行进行排序,但数组中的行和值必须保持不变。有什么pythonic方法可以做到这一点吗? 谢谢

【问题讨论】:

【参考方案1】:
ind=np.argsort(a[:,-1])
b=a[ind]

编辑 当您在排序中使用axis 时,它会单独对每一列进行排序,您想要的是从所选列中获取已排序行的索引(-1 相当于最后一列),然后重新排序原始数组。

【讨论】:

那很快,谢谢。 一些进一步的解释会很棒!【参考方案2】:
a[a[:,-1].argsort()] 

可能对你有用

【讨论】:

要访问最后一列,使用-1 比从列表的前面访问更可靠,因为前者可以缩放为不同的形状。

以上是关于基于最后一列值的numpy排序数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何按特定列值的前导整数对子数组进行排序?

如何按列值对二维数组进行排序?

numpy数组的排序,搜索,元素抽取

按列而不是轴对Numpy数组进行排序[重复]

如何按轴对numpy数组进行排序并保留行[重复]

Numpy数组排序