文章目录
- Pytorch
-
- 按元素相乘 / 点乘 / 按对应点相乘
- 按矩阵相乘 / 矩阵乘法
- Numpy
-
- 按元素相乘
- 按矩阵相乘
- 注: 内积 / 点积
Pytorch
按元素相乘 / 点乘 / 按对应点相乘
API:mul_和mul
要求:两个tensor的列数须相同(行数可以不同,可以用于tensor和权重相乘)
>>> import torch
>>> a = torch.tensor([[1,2,3,4,5]])
>>> b = torch.tensor([[1,2,3,4,5]])
# 注意:做完这个运算之后a的值已经被改变了!
>>> a.mul_(b)
tensor([[ 1, 4, 9, 16, 25]])
>>> a.mul(b)
tensor([[ 1, 4, 9, 16, 25]])
>>> torch.mul(a,b)
tensor([ 1, 4, 9, 16, 25])
按矩阵相乘 / 矩阵乘法
API: mm
要求:第一个tensor的第二维度和第二个tensor的第一维度须相同
>>> b = torch.tensor([[1],[2],[3],[4],[5]])
>>> a.mm(b)
tensor([[55]])
>>> torch.mm(a,b)
tensor([[55]])
Numpy
按元素相乘
API: np.multiply()和 *
要求:与Pytorch点乘要求相同
>>> import numpy as np
>>> a = np.array([[1,2,3,4,5]])
>>> np.multiply(a,a)
array([[ 1, 4, 9, 16, 25]])
>>> a*a
array([[ 1, 4, 9, 16, 25]])
按矩阵相乘
API: np.matmul(), np.dot(),@
要求:与Pytorch矩阵乘法要求相同
>>> b = np.array([[1],[2],[3],[4],[5]])
>>> np.matmul(b,a)
array([[ 1, 2, 3, 4, 5],[ 2, 4, 6, 8, 10],[ 3, 6, 9, 12, 15],[ 4, 8, 12, 16, 20],[ 5, 10, 15, 20, 25]])
>>> np.dot(b,a)
array([[ 1, 2, 3, 4, 5],[ 2, 4, 6, 8, 10],[ 3, 6, 9, 12, 15],[ 4, 8, 12, 16, 20],[ 5, 10, 15, 20, 25]])
>>> b@a
array([[ 1, 2, 3, 4, 5],[ 2, 4, 6, 8, 10],[ 3, 6, 9, 12, 15],[ 4, 8, 12, 16, 20],[ 5, 10, 15, 20, 25]])
其他:
注: 内积 / 点积
- 点积也叫点积,是两个数值直接相乘,或者两个(1, n)和(n, 1)的矩阵相乘。
- 点积的结果是一个数值。
- 可以通过矩阵转置实现,如一个(n, 1)转置成(1, n)之后可以和另一个(n, 1)的矩阵相乘,结果就是点积。个人理解这种点积其实还是一种矩阵乘法。有人把np.dot()叫做点积运算,那是不对的。