【问题标题】:Python : NumPy sorting arrayPython:NumPy 排序数组
【发布时间】:2021-06-11 10:23:43
【问题描述】:

我目前正在尝试对一个 numpy 数组进行排序,但遇到了困难

我要排序的数组如下:

mat = np.array([0.05170475 0.07367926 0.05741241 0.34870369 0.19990381 0.26859608])

现在困难的部分是我要对数组进行排序,但同时还要保留索引。

例如不使用numpy,我会使用

mat = list(enumerate(mat))    # gives [(0, 0.05170474575702143), (1, 0.07367926270375554), (2, 0.05741241249643288), (3, 0.3487036852148175), (4, 0.19990381197331886), (5, 0.2685960818546567)]
mat.sort(reverse = True, key = lambda ×: ×[1])    # gives [(3, 0.3487036852148175), (5, 0.2685960818546567), (4, 0.19990381197331886), (1, 0.07367926270375554), (2, 0.05741241249643288), (0, 0.05170474575702143)]

但是,由于我使用的是numpy,我想知道是否有一个 numpy 函数可以完成所有这些工作。我能够使用np.sortnp.argsort 分别对索引和值进行排序,但我无法同时进行这两者...

【问题讨论】:

  • 可以将np.sortnp.argsort的结果压缩在一起
  • @Pygirl 太棒了!有没有办法按降序排序,有点像reverse=True。现在我正在使用np.flip,但我想知道是否有办法告诉 numpy 按降序排序?

标签: python arrays numpy sorting


【解决方案1】:
indices = np.argsort(mat)[::-1]
np.hstack((indices[:, np.newaxis], mat[indices][:, np.newaxis]))
array([[3.        , 0.34870369],
       [5.        , 0.26859608],
       [4.        , 0.19990381],
       [1.        , 0.07367926],
       [2.        , 0.05741241],
       [0.        , 0.05170475]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多