Numpy Matmul,同时忽略第一个轴

2024-09-28 22:21:41 发布

您现在位置:Python中文网/ 问答频道 /正文

在一个二维的shape (1000, 5)数组中,我有一组5维的shape (5,),每个向量都要乘以一个形状(6, 5)的矩阵。在

我本以为广播可以让我这么做

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)的输出?在


Tags: 方法fornp矩阵random数组向量empty
2条回答

我刚刚想出了答案。解决方案是将数组格式化为

A = np.ones((100, 5, 1))
B = np.ones((6, 5))
np.matmul(B, A)

广播也没问题。希望这有帮助!在

如果你真的有这个:

A = np.random.rand(1000, 5)
B = np.random.rand(6, 5)

那么做这个手术更简单的方法是

^{pr2}$

或者

^{3}$

记住矩阵乘法是内积,因此内部维数必须匹配(在本例中,是5)。通过转置.T可以交换6和{}维,使它们按正确的顺序排列。在

如果您不想使用顺序(假设您有大量的维度),也可以始终使用np.einsum显式地设置轴

np.einsum('ij,kj->ik', A, B, optimize = True)

optimize使其几乎与.dot()@一样快,但目前只在您不需要在输入上广播维度时才起作用(您不在这里)。在

相关问题 更多 >