当前位置: 代码迷 >> 综合 >> Pytorch和Numpy的乘法【一网打尽!】
  详细解决方案

Pytorch和Numpy的乘法【一网打尽!】

热度:77   发布时间:2023-12-15 16:48:14.0

文章目录

  • 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. 点积也叫点积,是两个数值直接相乘,或者两个(1, n)和(n, 1)的矩阵相乘。
  2. 点积的结果是一个数值。
  3. 可以通过矩阵转置实现,如一个(n, 1)转置成(1, n)之后可以和另一个(n, 1)的矩阵相乘,结果就是点积。个人理解这种点积其实还是一种矩阵乘法。有人把np.dot()叫做点积运算,那是不对的。