在没有for循环的情况下,在python中获取两个数组的点积

时间:2019-01-25 05:21:03

标签: python arrays numpy for-loop

我有两个数组WxW的形状为(16, 10)x的形状为(10000, 16)。我需要在Wx的转置之间取点积。问题在于xW的形状非常不同,因此在尝试执行此操作时会出现错误。当然,我可以使用for循环来做到这一点,但是我想不使用任何for循环来做到这一点。

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

上面的代码产生一个数组s,该数组包含10个条目。我试图将s设置为10,000行,每行10个条目(不使用for循环)。

1 个答案:

答案 0 :(得分:1)

您可能正在寻找

s = x.dot(W)

s = x @ W

dot表现为简单一维向量的for乘积,但否则为完整矩阵乘法。由于要使用(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)