【问题标题】:Numpy Dot Product of two 2-d arrays in numpy to get 3-d arraynumpy中两个二维数组的Numpy点积得到3维数组
【发布时间】:2016-02-14 21:13:28
【问题描述】:

抱歉,标题解释不当。我正在尝试并行化我的部分代码并卡在点积上。我正在寻找一种有效的方法来执行下面的代码,我确信有一个简单的线性代数解决方案,但我非常卡住:

puy = np.arange(8).reshape(2,4)
puy2 = np.arange(12).reshape(3,4)

print puy, '\n'
print puy2.T

zz = np.zeros([4,2,3])

for i in range(4):
    zz[i,:,:] = np.dot(np.array([puy[:,i]]).T,
                np.array([puy2.T[i,:]]))

【问题讨论】:

    标签: python numpy dot-product


    【解决方案1】:

    一种方法是使用np.einsum,它允许您指定要对索引进行的操作:

    >>> np.einsum('ik,jk->kij', puy, puy2)
    array([[[ 0,  0,  0],
            [ 0, 16, 32]],
    
           [[ 1,  5,  9],
            [ 5, 25, 45]],
    
           [[ 4, 12, 20],
            [12, 36, 60]],
    
           [[ 9, 21, 33],
            [21, 49, 77]]])
    >>> np.allclose(np.einsum('ik,jk->kij', puy, puy2), zz)
    True
    

    【讨论】:

      【解决方案2】:

      这是broadcasting 的另一种方式-

      (puy[None,...]*puy2[:,None,:]).T
      

      【讨论】:

        猜你喜欢
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        • 2013-07-16
        • 1970-01-01
        • 2021-11-12
        • 1970-01-01
        相关资源
        最近更新 更多