【问题标题】:Sum rows of 2D array with elements of 1D array将二维数组的行与一维数组的元素相加
【发布时间】:2023-02-25 22:01:21
【问题描述】:

我有两个 ndarrays:
a = [[1, 2], [100, 200]]
b = [10, 20]

是否有可能使用 numpy 获得这样的 ndarray: [[1 + 10, 2 + 10], [100 + 20, 200 + 20]]

【问题讨论】:

    标签: python numpy numpy-ndarray


    【解决方案1】:

    您只需要转置第一个数组,执行加法,然后转回:

    import numpy as np
    a = np.array([[1, 2], [100, 200]])
    b = np.array([10, 20])
    x = a.T + b
    print(x)
    # [[ 11 120]
    #  [ 12 220]]
    print(x.T)
    # [[ 11  12]
    #  [120 220]]
    

    请注意,转置数组是“免费的”,因此多次转置并不担心。

    【讨论】:

    • 或者只是通过添加维度使 b 成为列数组
    【解决方案2】:

    是的,这可以使用 reshape 实现。

        import numpy as np
        a = np.array([[1, 2], [100, 200]])
        b = np.array([10, 20])
        
        result = a + b.reshape(-1, 1) # is a column
    

    【讨论】:

      【解决方案3】:

      另一种可能的解决方案,基于numpy broadcasting

      a + b[:,None]
      

      解释

      b[:,None]
      

      array([[10],
             [20]])
      

      所以通过将两个数组相加,数组

      array([[10],
             [20]])
      

      将被广播并汇总到a 的每一列,产生想要的结果。


      输出:

      array([[ 11,  12],
             [120, 220]])
      

      【讨论】:

      • 谢谢@PranavHosangadi 发表评论。我刚刚添加了一个解释。
      • 谢谢。我记得第一次遇到 [:, None] 符号时被它弄糊涂了。解释正在发生的事情的答案更有帮助!
      猜你喜欢
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 2019-07-23
      • 2021-03-30
      相关资源
      最近更新 更多