python - numpy中两个二维数组的Numpy点积得到三维数组

标签 python numpy dot-product

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

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,:]]))

最佳答案

一种方法是使用 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

关于python - numpy中两个二维数组的Numpy点积得到三维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35398057/

相关文章:

python - 通过SSH连接到MySQL数据库

python - 如何使用 python lambda 或列表推导式根据条件获取列表的子集

python - 为什么当 Numpy 不进行点积计算时 Dask 数组会抛出内存错误?

python - pandas read_csv 列标题中带有井号

python - 好奇模数运算符 (%) 结果

Python像matlab一样删除带有bool索引的矩阵行

python - 如何与子进程共享父进程的 numpy 随机状态?

python - 你如何为 numpy 和 Pandas 修复 "runtimeError: package fails to pass a sanity check"?

r - R 中矩阵两列相乘之和

c++ - inner_product 和复 vector