【问题标题】:Reverse sort of matrix using numpy based on a specific column [duplicate]基于特定列使用numpy对矩阵进行反向排序[重复]
【发布时间】:2018-10-23 15:49:00
【问题描述】:
import numpy as np

mat = np.array([[1,21,3],[5,4,2],[56,12,4]])
mat_sort = mat[mat[:,2].argsort()]
print(mat_sort)

输出:

[[ 5  4  2]
 [56 12  4]
 [ 1 21  3]]

如果我希望根据任何列进行反向排序,比如第 3 列,我要对代码进行哪些更改?意思是,我希望得到:

[[56 12  4]
[ 1 21  3]
[ 5  4  2]]

P.s 是的,我知道这是一个简单的问题,但我找不到我理解的答案,并且是基于矩阵而不是数组或向量。 TIA :)

【问题讨论】:

  • 附录:反向我的意思是降序。
  • 所以在你的情况下,mat[mat[:, 2].argsort()[::-1] 可以工作。
  • mat[-mat[:,2].argsort()]
  • @miradulo 好的,谢谢。他们都工作。使用 'mat[mat[:, 2].argsort()[::-1]' 时我有一个问题: [::-1] 中的 :: 表示什么?为什么我不能只写 [-1]?
  • @user10089194 不用担心。 NumPy 文档的 Indexing 部分包含有关 NumPy 中索引的所有详细信息,但它只是扩展了基本的 Python 切片符号,它具有符号 [<first to include>:<first to exclude>:<step>]。因此,使用[::-1],您将包含数组的所有元素并向后退一步。

标签: python sorting numpy matrix


【解决方案1】:

只需反转 argsort 索引:

mat_sort = mat[mat[:, 2].argsort()[::-1]]

【讨论】:

    【解决方案2】:
    print(mat_sort[::-1]) #just print in reverse
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 2021-06-29
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      相关资源
      最近更新 更多