首页 > 解决方案 > 在没有for循环的python中取两个数组的点积

问题描述

我有两个数组Wx. W有形有形。(16, 10)_ 我需要在 和 的转置之间取点积。问题是 和 的形状非常不同,因此在尝试执行此操作时我不断收到错误消息。当然我可以用循环来做到这一点,但我想在不使用任何循环的情况下做到这一点。x(10000, 16)WxxWforfor

for i in range(x.shape[0])
    s = (np.dot(W.transpose(), x[i])) + b

上面的代码生成一个数组,s,它由 10 个条目组成。我试图达到s10,000 行,每行有 10 个条目(不使用for循环)。

标签: pythonarraysnumpyfor-loop

解决方案


您可能正在寻找

s = x.dot(W)

或者

s = x @ W

dot表现为简单一维向量的乘积,否则是成熟的矩阵乘法。由于您需要(10000, 10)结果形状,因此您需要设置矩阵以在外部维度中具有该形状,并匹配内部维度:

(10000, 16) x (16, 10) -> (10000, 10)

要以您想要的任何顺序执行总和,您可以使用np.einsum

s= np.einsum('ik,ji->jk', W, x)

或者干脆

s = np.einsum('ik,ji', W, x)

推荐阅读