PyTorch中torch.matmul()函数常见用法总结
作者:wendy_ya 发布时间:2023-03-28 16:01:31
一、函数介绍
pytorch中两个张量的乘法可以分为两种:
两个张量对应元素相乘,在PyTorch中可以通过torch.mul函数(或*运算符)实现;
两个张量矩阵相乘,在PyTorch中可以通过torch.matmul函数实现;
torch.matmul(input, other) → Tensor
计算两个张量input和other的矩阵乘积
【注意】:matmul函数没有强制规定维度和大小,可以用利用广播机制进行不同维度的相乘操作。
二、常见用法
torch.matmul()也是一种类似于矩阵相乘操作的tensor连乘操作。但是它可以利用python中的广播机制,处理一些维度不同的tensor结构进行相乘操作。这也是该函数与torch.bmm()区别所在。
2.1 两个一维向量的乘积运算
若两个tensor都是一维的,则返回两个向量的点积运算结果:
import torch
x = torch.tensor([1,2])
y = torch.tensor([3,4])
print(x,y)
print(torch.matmul(x,y),torch.matmul(x,y).size())
运行结果:
tensor([1, 2]) tensor([3, 4])
tensor(11) torch.Size([])
2.2 两个二维矩阵的乘积运算
若两个tensor都是二维的,则返回两个矩阵的矩阵相乘结果:
import torch
x = torch.tensor([[1,2],[3,4]])
y = torch.tensor([[5,6,7],[8,9,10]])
print(torch.matmul(x,y),torch.matmul(x,y).size())
运行结果:
tensor([[21, 24, 27],[47, 54, 61]]) torch.Size([2, 3])
2.3 一个一维向量和一个二维矩阵的乘积运算
若input为一维,other为二维,则先将input的一维向量扩充到二维(维数前面插入长度为1的新维度),然后进行矩阵乘积,得到结果后再将此维度去掉,得到的与input的维度相同。
import torch
x = torch.tensor([1,2])
y = torch.tensor([[5,6,7],[8,9,10]])
print(torch.matmul(x,y),torch.matmul(x,y).size())
运行结果:
tensor([21, 24, 27]) torch.Size([3])
【分析】:首先将x维度从(2)扩充为(,2),然后将x(,2) 与y(2,3)进行相乘,得到(,3),最后去掉一维部分,得到(3)
2.4 一个二维矩阵和一个一维向量的乘积运算
若input为二维,other为一维,则先将other的一维向量扩充到二维(维数后面插入长度为1的新维度),然后进行矩阵乘积,得到结果后再将此维度去掉,得到的与other的维度相同。
import torch
x = torch.tensor([[1,2,3],[4,5,6]])
y = torch.tensor([7,8,9])
print(torch.matmul(x,y),'\n',torch.matmul(x,y).size())
运行结果:
tensor([ 50, 122])
torch.Size([2])
【分析】:首先y维度从(3)扩充为(3,),然后将x(2,3)与x(2,)进行相乘,得到(2,),最后去掉一维部分,得到(2)
【总结】:2.3和2.4基本类似,唯一不同的是2.3中一维向量和二维矩阵的乘积运算需要在一维向量前面插入长度为1的新维度(x为一维向量,y为二维矩阵);2.4中二维矩阵和一维向量的乘积运算需要在一维向量后面插入长度为1的新维度(x为二维矩阵,y为一维向量)。
2.5 其他
其他的暂时用不上,有需要的可以自行查阅相关资料~
参考:https://cloud.tencent.com/developer/article/1802317
来源:https://blog.csdn.net/didi_ya/article/details/121158666
猜你喜欢
- 本篇没有考虑异步,多线程及SQL注入WebDatabase 规范中说这份规范不再维护了,原因是同质化(几乎实现者都选择了Sqlite),且不
- 1、使用索引来更快地遍历表。缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索
- 占位符通过占位符,可以指定格式进行输入或输出,以下为 fmt 标准库里的占位符:普通占位符占位符描述举例结果%v默认格式的值fmt.Prin
- 在进行数据分析、数据建模时,我们首先要做的就是对数据进行处理,提取我们需要的信息。下面为大家介绍一些groupby的用法,以便能够更加方便地
- <%'asp事务处理。'测试数据库为sql server,服务器为本机,数据库名为test,表名为a,两个字段id(i
- 一、实现划词功能说是划词翻译,实际上我们是通过获取用户的剪切板内容,通过一系列的操作得到的。首先呢,我们就先实现如何获取剪切板内容的程序首先
- 第一种方式:使用{}firstDict = {"name": "wang yuan wai ", &
- 1.图片来源该图片来源于百度图片,如果侵权,请联系我删除!图片仅用于知识交流。2.读取图片并显示imread():读取图片;imshow()
- centos7之Python3.74安装安装版本:Python3.74系统版本:centos7系统默认安装Python2.7,保留。安装/u
- 本文实例讲述了python中sleep函数用法。分享给大家供大家参考。具体如下:Python中的sleep用来暂停线程执行,单位为秒#---
- 这篇文章主要介绍了一种简单的MySQL数据库安装方法,详细内容请大家参考下文:虽然安装MySQL数据库的文章很多,但是我看后感觉对于初学者来
- set 是一个无序的元素集合,支持并、交、差及对称差等数学运算, 但由于 set 不记录元素位置,因此不支持索引、分片等类序列的操作。初始化
- Python 异常处理机制还提供了一个 finally 语句,通常用来为 try 块中的程序做扫尾清理工作。注意,和 else 语句不同,f
- .sh脚本可以自动运行多次实验。Windows系统下实现pycharm运行.sh文件1、安装GitGit官网下载或者点击这里下载默认设置安装
- 本文实例讲述了Python requests库用法。分享给大家供大家参考,具体如下:requests是Python中一个第三方库,基于 ur
- 一、石头剪刀布游戏目标:创建一个命令行游戏,游戏者可以在石头、剪刀和布之间进行选择,与计算机PK。如果游戏者赢了,得分就会添加,直到结束游戏
- opencv中内置了张正友的棋盘格标定法,通过一些姿态各异的棋盘格图像,就能标定相机的内外参数。角点检测第一步是角点检测,首先需要读取棋盘格
- 目标文件夹内有多份 Word 文件 ——【xxx涨薪通告.docx】,我们需要在这些文档的末尾处添加
- 原来字母还可以组合成各种动物图案,真是佩服设计师的奇思妙想,很可爱,超级有趣的组合!Bembo's Zoo 猴子:羊是牛吗,勤劳的水
- 前言python内置了一些非常巧妙而且强大的内置函数,对初学者来说,一般不怎么用到,我也是用了一段时间python之后才发现,哇还有这么好的