A = np.random.rand(1000, 5)
B = np.random.rand(1, 6, 5) # empty axis for broadcasting
np.matmul(B, A)
但这不能正常工作。有没有办法进行这种乘法,以便np.matmul(B,A)产生一个形状的输出(1000,6)?
答案 0 :(得分:1)
如果你确实有这个:
A = np.random.rand(1000, 5)
B = np.random.rand(6, 5)
然后更简单的方法是
A @ B.T
或
A.dot(B.T)
记住矩阵多面板是内部产品,因此内部尺寸必须匹配(在这种情况下,为5
)。通过转置.T
,您可以交换6
和5
维度,以便按正确的顺序获取它们。
如果您不想玩这个订单(比如你有很多尺寸),你也可以随时用np.einsum
明确设置轴
np.einsum('ij,kj->ik', A, B, optimize = True)
optimize
的效果几乎与.dot()
或@
一样快,但目前只有在您不需要在输入上广播维度时才会有效(您不需要&#39} ;这里)。
答案 1 :(得分:0)
我只想出答案。解决方案是将数组格式化为
A = np.ones((100, 5, 1))
B = np.ones((6, 5))
np.matmul(B, A)
广播出来了。希望这有帮助!