Pytorch 在Pytork中如何将矩阵与向量相乘

Pytorch 在Pytork中如何将矩阵与向量相乘,pytorch,Pytorch,我正在玩PyTorch,目的是学习它,我有一个非常愚蠢的问题:我如何用一个向量乘以一个矩阵 以下是我尝试过的: >>> import torch >>> a = torch.rand(4,4) >>> a 0.3162 0.4434 0.9318 0.8752 0.0129 0.8609 0.6402 0.2396 0.5720 0.7262 0.7443 0.0425 0.4561 0.1725 0.4390

我正在玩PyTorch,目的是学习它,我有一个非常愚蠢的问题:我如何用一个向量乘以一个矩阵

以下是我尝试过的:

>>> import torch
>>> a = torch.rand(4,4)
>>> a

 0.3162  0.4434  0.9318  0.8752
 0.0129  0.8609  0.6402  0.2396
 0.5720  0.7262  0.7443  0.0425
 0.4561  0.1725  0.4390  0.8770
[torch.FloatTensor of size 4x4]

>>> b = torch.rand(4)
>>> b

 0.1813
 0.7090
 0.0329
 0.7591
[torch.FloatTensor of size 4]

>>> a.mm(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: invalid argument 2: dimension 1 out of range of 1D tensor at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensor.c:24
>>> a.mm(b.t())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: t() expects a 2D tensor, but self is 1D
>>> b.mm(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: matrices expected, got 1D, 2D tensors at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensorMath.c:1288
>>> b.t().mm(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: t() expects a 2D tensor, but self is 1D
然后我的第一次尝试,
a.mm(b)
,效果很好。所以问题是我要乘的是一个向量而不是一个矩阵——但我怎么能做到呢?

你要找的是

torch.mv(a,b)

请注意,对于将来,您可能还会发现
torch.matmul()
非常有用
torch.matmul()
推断参数的维数,并相应地执行向量之间的点积、矩阵向量或向量矩阵乘法、矩阵乘法或高阶张量的批量矩阵乘法

这是对@mexmex正确且有用答案的自我补充

在Pytork中,与numpy不同,1D张量不能与1xN或Nx1张量互换。如果我替换

>>> b = torch.rand(4)

然后我将得到一个列向量,与
mm
的矩阵乘法将按预期工作


但这并不是必需的,因为正如@mexmex指出的那样,矩阵向量乘法有一个
mv
函数,还有一个
matmul
函数,它根据输入的维数分配适当的函数。

谢谢!为了将来的访客,我写了一个自我回答,并补充了一些信息。
>>> b = torch.rand(4)
>>> b = torch.rand((4,1))