【问题标题】:sorting via argsort - generalization to 2d matrices通过 argsort 排序 - 推广到 2d 矩阵
【发布时间】:2019-11-01 16:55:54
【问题描述】:

要通过 argsort 对 numpy 进行排序,我们可以这样做:

import numpy as np

x = np.random.rand(3)
x_sorted = x[np.argsort(x)]

我正在寻找一个用于泛化到二维或更高维度的 numpy 解决方案。

一维情况下的索引不适用于二维矩阵。

Y = np.random.rand(4, 3)
sort_indices = np.argsort(Y)
#Y_sorted = Y[sort_indices] (what would that line be?)

相关:我正在寻找一个纯粹的 numpy 答案来解决与此答案中解决的问题相同的问题:https://stackoverflow.com/a/53700995/2272172

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    使用np.take_along_axis:

    import numpy as np
    
    np.random.seed(42)
    
    x = np.random.rand(3)
    x_sorted = x[np.argsort(x)]
    
    Y = np.random.rand(4, 3)
    sort_indices = np.argsort(Y)
    
    print(np.take_along_axis(Y, sort_indices, axis=1))
    
    print(np.array(list(map(lambda x, y: y[x], np.argsort(Y), Y))))  # the solution provided 
    

    输出

    [[0.15599452 0.15601864 0.59865848]
     [0.05808361 0.60111501 0.86617615]
     [0.02058449 0.70807258 0.96990985]
     [0.18182497 0.21233911 0.83244264]]
    
    [[0.15599452 0.15601864 0.59865848]
     [0.05808361 0.60111501 0.86617615]
     [0.02058449 0.70807258 0.96990985]
     [0.18182497 0.21233911 0.83244264]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2015-02-04
      • 1970-01-01
      • 2016-06-03
      相关资源
      最近更新 更多