【问题标题】:sum of two matrix row by column两个矩阵逐列之和
【发布时间】:2018-02-15 15:50:59
【问题描述】:

我有两个矩阵:

mx1 = np.matrix([[2,9,9],[2,5,8],[7,2,9]])

[[2 9 9]
 [2 5 8]
 [7 2 9]]

mx2 = np.matrix([[7,1,3],[5,8,2],[6,9,5]])

[[7 1 3]
 [5 8 2]
 [6 9 5]]

我想做一些像矩阵乘积一样的事情,但需要求和。

即,生成的矩阵元素[1,1]应计算为:

(2+7)+(9+5)+(9+6) = 38

元素[1,2]:

(2+1)+(9+8)+(9+9) = 38

等等。

有什么聪明的方法吗?

【问题讨论】:

  • 对于小矩阵,你可以循环:res[​​i,j] = m1[i,j] + m2[j,i].
  • 我正在使用 1000x1000 矩阵,循环不是一个选项

标签: python numpy sum


【解决方案1】:

使用 numpy 广播怎么样?

mx1 = np.matrix([[2,9,9],[2,5,8],[7,2,9]])
mx2 = np.matrix([[7,1,3],[5,8,2],[6,9,5]])
res = np.sum(mx1, axis = 1) + np.sum(mx2, axis = 0)

【讨论】:

    【解决方案2】:

    numpy 转置你的第二个矩阵,然后进行元素加法。

    mx2t = np.transpose(mx2)
    motot = np.add(mx1, mx2t)
    

    然后使用带有轴参数的 numpy 对列求和。 (对于您的示例,我假设您最终会得到一个 1x3 矩阵,而不是 3x3 矩阵,因为我不清楚您将如何计算 element[2,2])。

    【讨论】:

      【解决方案3】:

      我认为这可以满足您的需求,但我不确定它的效率如何,以及它是否适用于您的大数据。

      import itertools
      
      m, _ = np.shape(mx1)
      _, n = np.shape(mx2)
      
      r = np.array(list(map(np.sum, itertools.product(mx1, mx2.T)))).reshape(m, n)
      

      分解:使用 itertools.product 创建所有行和列对。将这些对相加。然后根据原来的形状重塑。我希望这会有用。

      【讨论】:

        猜你喜欢
        • 2021-03-07
        • 2020-10-14
        • 2015-10-12
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多