我有两个数组W
和x
。 W
的形状为(16, 10)
,x
的形状为(10000, 16)
。我需要在W
和x
的转置之间取点积。问题在于x
和W
的形状非常不同,因此在尝试执行此操作时会出现错误。当然,我可以使用for
循环来做到这一点,但是我想不使用任何for
循环来做到这一点。
for i in range(x.shape[0])
s = (np.dot(W.transpose(), x[i])) + b
上面的代码产生一个数组s
,该数组包含10个条目。我试图将s
设置为10,000行,每行10个条目(不使用for
循环)。
答案 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)