目录

  • 一、函数介绍
  • 二、常见用法
    • 2.1 两个一维向量的乘积运算
    • 2.2 两个二维矩阵的乘积运算
    • 2.3 一个一维向量和一个二维矩阵的乘积运算
    • 2.4 一个二维矩阵和一个一维向量的乘积运算
    • 2.5 其他

一、函数介绍

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

PyTorch疑难杂症(1)——torch.matmul()函数用法总结相关推荐

  1. gather torch_浅谈Pytorch中的torch.gather函数的含义

    pytorch中的gather函数 pytorch比tensorflow更加编程友好,所以准备用pytorch试着做最近要做的一些实验. 立个flag开始学习pytorch,新开一个分类整理学习pyt ...

  2. tf.matmul函数用法

    tf.matmul函数用法 函数:tf.matmul 表示:将矩阵 a 乘以矩阵 b,生成a * b matmul(a,b,transpose_a=False,transpose_b=False,ad ...

  3. torch.bmm()和torch.matmul()函数的用法和区别,矩阵相乘

    torch.bmm()和torch.matmul()都是矩阵乘法的运算函数,区别是,torch.matmul更强大. 两者都可以支持3维的矩阵运算,实际是第一维只是找下标,后面2维才是矩阵,然后对应做 ...

  4. Pytorch中的torch.where函数

    首先我们看一下Pytorch中torch.where函数是怎样定义的: @overload def where(condition: Tensor) -> Union[Tuple[Tensor, ...

  5. pytorch中的torch.squeeze()函数

    torch.squeeze(input, dim=None, out=None) squeeze()函数的功能是维度压缩.返回一个tensor(张量),其中 input 中大小为1的所有维都已删除. ...

  6. [一起学习pytorch吧]之torch.sign函数

    Hello,大家好!今天为大家讲解以下pytorch的sign函数. torch.sign(input, out=None) → Tensor 该函数的作用就是输出input通过sign函数后的张量, ...

  7. Pytorch中的torch.gather函数的含义

    pytorch中的gather函数 pytorch比tensorflow更加编程友好,所以准备用pytorch试着做最近要做的一些实验. 立个flag开始学习pytorch,新开一个分类整理学习pyt ...

  8. torch.contiguous()函数用法

    在看代码的时候发现了torch.contiguous()这个函数,那么它有什么用途呢? 1)背景知识 首先得知道一个tensor的shape和stride的区别.以二维矩阵为例,shape = [ro ...

  9. torch.roll() 函数用法

    Pytorch 官方文档:https://pytorch.org/docs/master/generated/torch.roll.htmlhttps://pytorch.org/docs/maste ...

最新文章

  1. 层化(stratification)的方法
  2. Vbox共享文件夹不显示了
  3. [GRYZ2015]快排练习
  4. linux 查询替换文件内容吗,Linux 下查询文件的方法 替换文件内容
  5. C++ 智能指针最佳实践源码分析
  6. 分布式事务架构设计原理
  7. python 监控网页_python实时监控网页
  8. java 蓝桥杯 乘法次数(题解)
  9. nvidia显卡linux 7.2,科学网—悲喜录:服务器 CentOS 7.2 安装Nvidia显卡驱动(64bit) - 袁伟的博文...
  10. 通过stream去重_分享几种 Java8 中通过 Stream 对列表进行去重的方法
  11. html5 密码强度,前端开发判断输入密码强度
  12. python图片加透明通道并将背景设为透明
  13. CentOS 7.4 初次手记:第三章 CentOS基础了解
  14. 快手私信名片如何制作?
  15. 压缩卷时可压缩空间远小于实际剩余空间解决方法
  16. eclipse出现Package jdk.internal.jimage.decompressor in both module java.base and module jrt.fs错误解决办法
  17. ico图标在线制作工具以及带步骤(图文教程)
  18. 如何成为一个优秀的数据分析师?
  19. 迪士尼机器人芭蕾舞_迪士尼“跳跳虎”机器人来了!
  20. python爬虫网易云音乐最热评论并分析_网易云音乐热门评论api分析

热门文章

  1. consul作为配置中心
  2. C++的四种编程范式
  3. Medusa和Hydra快速入门手册
  4. 华为Kirin985是哪些手机在用?
  5. 探索特殊符号电脑上输出
  6. Android URL 下载文件
  7. css为什么要用浮动_细品100道CSS知识点(上)「干货满满」
  8. IEEE75432位float表示范围
  9. CVE-2022-22963 Spring Cloud Function SpEL 远程代码执行漏洞 复现
  10. #解题记录 有三个量杯,分别是3ml、5ml和装满水的10毫升,如何分离出5ml的水