【问题标题】:Multplying matrix columns by matrix in numpy在numpy中将矩阵列乘以矩阵
【发布时间】:2020-03-04 10:12:31
【问题描述】:

我正在尝试以更有效的方式计算此操作:

y = np.array([xi*M for xi in x.T])

其中x(m,n) 矩阵,M(m,m) 矩阵。输出y 的形状为(n,m,m),每个y[i,:,:] = np.multiply(x[:,i],M)

我正在考虑使用 einsum,但我很难理解如何使用下标。

【问题讨论】:

  • x 可能是 n 乘 m 不是吗?
  • @AlexKreimer 已编辑,感谢您指出我的错误
  • 实际上 x 是 (m, n) 以便 np.multiply(x[:,i],M) 工作。
  • @AndreasK。你是对的,但他确实np.multiply(x[i], M)

标签: python numpy matrix-multiplication


【解决方案1】:

einsum 的精彩介绍在这里 http://ajcr.net/Basic-guide-to-einsum

为您的案例编制索引:

np.einsum('ik,jk->ijk', x.T, M)

下面是一个简单的测试:

m, n = 3, 2
x = np.arange(n*m).reshape((m, n))
M = np.arange(m*m).reshape((m,m))
x
array([[0, 1],
       [2, 3],
       [4, 5]])

M
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

y = np.array([xi*M for xi in x.T])

y
array([[[ 0,  2,  8],
        [ 0,  8, 20],
        [ 0, 14, 32]],

       [[ 0,  3, 10],
        [ 3, 12, 25],
        [ 6, 21, 40]]])
np.einsum('ik,jk->ijk', x.T, M)
array([[[ 0,  2,  8],
        [ 0,  8, 20],
        [ 0, 14, 32]],

       [[ 0,  3, 10],
        [ 3, 12, 25],
        [ 6, 21, 40]]])

【讨论】:

    【解决方案2】:

    更直接的下标

    out = np.einsum('ij,li ->jli',x,M)
    
    Out[187]:
    array([[[  0,   3,  12,  27],
            [  0,  15,  36,  63],
            [  0,  27,  60,  99],
            [  0,  39,  84, 135]],
    
           [[  0,   4,  14,  30],
            [  4,  20,  42,  70],
            [  8,  36,  70, 110],
            [ 12,  52,  98, 150]],
    
           [[  0,   5,  16,  33],
            [  8,  25,  48,  77],
            [ 16,  45,  80, 121],
            [ 24,  65, 112, 165]]])
    

    【讨论】:

      【解决方案3】:

      不使用 einsum(只是基本的broadcasting):

      # Example
      # m, n = 5, 3
      # M = np.random.rand(m,m)
      # x = np.random.rand(m,n)
      
      y = x.T[:,None] * M
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 2013-11-13
        • 2017-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        相关资源
        最近更新 更多