torch中向量、矩阵乘法大总结
总结
- 文章来源: CSDN@LawsonAbs
- 如下代码可以在我的Github库中找到。
1.点乘(Dot product
)
点乘:就是向量的各个元素对应相乘。
比如现在我们有两个向量,a=[2,3], b=[-1,3]
,则其点乘结果是:7。可以有两种方法来计算:
1.1 使用 dot()
方法
给定两个向量 x , y ∈ R d x,y∈R^d x,y∈Rd ,它们的点积(dotproduct) x ⊤ y x^⊤y x⊤y (或 ⟨x,y⟩ )是相同位置的按元素乘积的和: x ⊤ y = ∑ i = 1 d x i y i x^⊤y=∑^d_{i=1}x_iy_i x⊤y=∑i=1dxiyi。
注意:这里的点乘并不是我们普通理解的那个向量乘法。【我有点儿疑惑了,这里不就是向量乘法吗?】
a = t.tensor([2, 3])
b = t.tensor([-1,3])
print(t.dot(a,b))
运行结果:
tensor(7)
1.2 使用mm()
方法
mm
方法适用于矩阵的乘法。我们可以将一个向量看作是一个简单的1*m
的矩阵,然后执行操作即可。代码如下:
"""2.使用tensor中的mm方法做向量乘法
01.mm 计算矩阵的乘法
02.这里是将向量转为一个矩阵,然后做乘法。实现dot做点乘的效果
"""
# a = t.tensor([1,2]) 这样并不是一个矩阵!!!只是一个类似list的tensor
a = t.tensor([[1,2]]) # 是一个矩阵
b = t.tensor([[2,3]]) # 是一个矩阵
b = t.transpose(b,0,1) # 转置后才有和a进行运算
print(a.shape,b.shape)
print(t.mm(a,b))
执行结果如下:
需要注意的是mm方法中两个tensor都必须是同类型的数,否则会报RuntimeError: expected scalar type Long but found Float
错
1.3 matmul()
方法
- 两个
tensor
的矩阵乘积。乘积的结果视tensor的维度而定 - 可以用于两个维度不同的矩阵做乘法
1.3.1 如果两个的 tensor
都是1维的,那么点积结果(是一个标量)将会被返回
1.3.2 矩阵乘以向量
'''
matrix x vector
'''
import torch as t
tensor1 = t.randn(3, 4)
tensor2 = t.randn(4)
print(tensor1)
print(tensor2)
out = t.matmul(tensor1, tensor2)
print(out)
print(out.size())
1.3.3 如果两个tensor都是2维的,那么矩阵乘积结果将会被返回
- 如果第一个参数是1维的,第二个参数是2维的,那么为了矩阵乘法就会在第一个参数中追加一维。在矩阵乘法之后,追加的维度就会被移除。
1.3.4 高维矩阵相乘
1.4 bmm()
方法
可以使用 bmm()
对一个高维矩阵进行乘法运算,比如(2,3,5)
与 (2,5,8)
得到的结果矩阵的 size
就是(2,5,8)
2. *运算符
2.1 使用*号做按位乘法
import torch as t
a = t.tensor([0.1000,0.4000])
weight = t.tensor([0.1200, 0.3200])
print(a*weight)
执行结果:
tensor([0.0120, 0.1280])
2.2 使用*号做广播乘法
如下图所示:a,b
是两个不同维度的矩阵,直接使用*号后便做一个广播乘法,得到结果。右侧给出了计算过程。
这里的广播原则是:直接将低维的a(2,3,1) 变化成了(2,3,8)。然后与b按元素相乘。等到最后的结果。
相关文章
- python读写配置文件使用总结与避坑指南
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- C++ template 学习归纳总结4
- IOS UISlider用法总结
- 【学习总结】快速上手Linux玩转典型应用-第1章-课程介绍
- new,virtual,override,interface,delegate,event-------------C#——方法实现总结
- 模块化开发之sea.js实现原理总结
- Atitit it法学论 uke协会it刑法attilax总结 目录 1. 法学plus1 1.1. 替换表1 2. 第一章 刑法概说1 2.1. 财产1 3. Line 65: 第四章 犯
- Atitit 个人 企业 政府 等组织 财政收入分类与提升途径attilax总结 v2
- Atitit (Sketch Filter)素描滤镜的实现 图像处理 attilax总结
- Atitit.ide技术原理与实践attilax总结
- java——String方法的总结
- MyEclipse2013使用总结
- 一个项目总结从原理图、Layout、焊板、写程序到最后测试
- 非监督异常点检测算法总结——没有想到矩阵分解和编码解码器也是一种思路
- MySQL面试总结
- 【C++ 科学计算】矩阵变量类型总结