按元素矩阵向量乘法
Element-wise matrix vector multiplication
我有一个张量 m 存储 n 3 x 3
矩阵与暗 n x 3 x 3
和张量 v 与 n 3x1
向量和 dim n x 3
。如何应用逐元素矩阵向量乘法,即将第 i 矩阵与第 i 向量相乘,以获得输出张量暗 n x 3
?
感谢您的帮助。
您想执行矩阵乘法运算 (__matmul__
) in a batch-wise manner. Intuitively you can use the batch-matmul operator torch.bmm
。请记住,您首先需要在 v
上取消压缩一维,使其成为 3D 张量。在这种情况下,索引最后一个None
为 v[..., None]
的维度将提供 (n, 3, 1)
.
的形状
与torch.bmm
:
>>> torch.bmm(m, v[..., None])
事实证明,torch.matmul
处理了这种情况 out-of-the-box:
>>> torch.matmul(m, v[..., None]) # same as m@v[..., None]
如果您想明确控制操作,可以使用 torch.einsum
:
>>> torch.einsum('bij,bj->bi', m, v)
我有一个张量 m 存储 n 3 x 3
矩阵与暗 n x 3 x 3
和张量 v 与 n 3x1
向量和 dim n x 3
。如何应用逐元素矩阵向量乘法,即将第 i 矩阵与第 i 向量相乘,以获得输出张量暗 n x 3
?
感谢您的帮助。
您想执行矩阵乘法运算 (__matmul__
) in a batch-wise manner. Intuitively you can use the batch-matmul operator torch.bmm
。请记住,您首先需要在 v
上取消压缩一维,使其成为 3D 张量。在这种情况下,索引最后一个None
为 v[..., None]
的维度将提供 (n, 3, 1)
.
与torch.bmm
:
>>> torch.bmm(m, v[..., None])
事实证明,torch.matmul
处理了这种情况 out-of-the-box:
>>> torch.matmul(m, v[..., None]) # same as m@v[..., None]
如果您想明确控制操作,可以使用 torch.einsum
:
>>> torch.einsum('bij,bj->bi', m, v)