代码之家  ›  专栏  ›  技术社区  ›  Joan

基于每行选定值的总和对np数组排序

  •  0
  • Joan  · 技术社区  · 2 年前

    我有一个2D numpy数组,里面充满了浮点数。

    例如:

    array([[0.80372444, 0.35468653, 0.9081662 , 0.69995566],
           [0.53712474, 0.90619077, 0.69068265, 0.73794143],
           [0.14056974, 0.34685164, 0.87505744, 0.56927803]])
    

    以下是我尝试的内容:

    a = np.array(sorted(a, key = sum))
    

    但这只是对每行的所有值求和,而不是说,只对第二到第六个元素求和。

    2 回复  |  直到 2 年前
        1
  •  1
  •   James    2 年前

    你可以使用 take [1,2] 从每行(轴=1)。然后 sum argsort 求和的顺序。这提供了一组行索引,您可以使用这些索引按所需顺序对数组进行切片。

    import numpy as np
    
    a = np.array([[0.80372444, 0.35468653, 0.9081662 , 0.69995566],
                  [0.53712474, 0.90619077, 0.69068265, 0.73794143],
                  [0.14056974, 0.34685164, 0.87505744, 0.56927803]])
    
    a[a.take([1, 2], axis=1).sum(axis=1).argsort()]
    # returns:
    array([[0.14056974, 0.34685164, 0.87505744, 0.56927803],
           [0.80372444, 0.35468653, 0.9081662 , 0.69995566],
           [0.53712474, 0.90619077, 0.69068265, 0.73794143]])
    
        2
  •  1
  •   Scott Hunter    2 年前

    key

    a = np.array(sorted(d, key = lambda v : sum(v[1:3])))