【1】引言
pytorch对张量的基本运算和线性代数课堂的教学有一些区别,至少存在hadamard积、点积和矩阵乘法三种截然不同的计算方法。
【2】hadamard积
hadamard积是元素对位相乘,用"*"连接张量,代码:
python
# 导入包
import torch
# 生成多维张量
y=torch.tensor([[1,2,3],
[1,2,3],
[1,2,3]])
z=torch.tensor([[1,2,3],
[3,2,1],
[0,2,6]])
# hadamard积运算
a=y*z
# 打印
print(a)
代码运行后,按照对位相乘的效果输出:

++图1 hadamard积运算++
【3】点积
点积是元素对位相乘后再求和,用"torch.sum(*)"连接张量,代码:
python
# 导入包
import torch
# 生成多维张量
y=torch.tensor([[1,2,3],
[1,2,3],
[1,2,3]])
z=torch.tensor([[11,2,3],
[3,12,1],
[10,2,16]])
# hadamard积运算
a=y*z
# 打印
print(a)
# 点积运算
b=torch.sum(y*z)
# 打印
print(b)
代码运行后,按照先对位相乘、再求和的效果输出:

++图2 点积运算++
【4】矩阵乘法
矩阵乘法是第一个矩阵的第i行与第二个矩阵第j列相乘的效果,用"torch.mm()"连接矩阵,就是大家所熟悉的线性代数中得矩阵乘法,代码:
python
# 导入包
import torch
# 生成多维张量
y=torch.tensor([[11,2,3],
[1,12,30],
[10,12,3]])
z=torch.tensor([[11,12,3],
[3,12,10],
[10,2,16]])
# hadamard积运算
a=y*z
# 打印
print(a)
# 点积运算
b=torch.sum(y*z)
# 打印
print(b)
# 矩阵乘法
c=torch.mm(y,z)
# 打印
print(c)
代码运行后,按照第一个矩阵的第i行与第二个矩阵第j列相乘的效果输出:

++图3 矩阵乘法运算++
【5】总结
本次学习了pytorch基本运算,包括hadamard积、点积和矩阵乘法:
- hadamard积是元素对位相乘,用"*"连接张量
- 点积是元素对位相乘后再求和,用"torch.sum(*)"连接张量
- 矩阵乘法是第一个矩阵的第i行与第二个矩阵第j列相乘的效果,用"torch.mm()"连接矩阵,就是大家所熟悉的线性代数中得矩阵乘法。