矩阵相乘在torch中的几种情况

  • 1、矩阵逐元素(Element-wise)乘法 torch.mul(mat1, other)

mat和other可以是标量也可以是任意维度的矩阵,只要满足最终相乘是可以broadcast的即可,即该操作是支持broadcast操作的。只要mat1与other满足broadcast条件,就可可以进行逐元素相乘 。

# 生成指定张量
c = torch.Tensor([[1, 2, 3], [4, 5 ,6]])
print(c.shape)  # 2*3
print(c)# 生成随机张量
d = torch.randn(2,2,3)
print(d)
print(d.shape)  # 2*2*3mul = torch.mul(c, d) # c会自动broadcast和d进行匹配
print(mul.shape)      # 2*2*3
print(mul)
  • 2、 二维矩阵相乘 torch.mm(a, b)

该函数一般只能用来计算两个二维矩阵的矩阵乘法,而且不支持broadcast操作。

  • 3、三维带Batch矩阵乘法 torch.bmm()

torch.bmm(bmat1,bmat2)torch.bmm(bmat1, bmat2)torch.bmm(bmat1,bmat2), 其中bmat1(B×n×m)bmat1(B\times n\times m)bmat1(B×n×m),bmat2(B×m×d)bmat2(B\times m \times d)bmat2(B×m×d)输出的维度是outoutout的尺度是B×n×dB\times n \times dB×n×d,该函数两个输入必须三维矩阵中的第一维要要相同,不支持broadCast操作。

  • 4、多维数据矩阵相乘torch.matmul(a, b)

矩阵乘法使用使用两个参数的后两个维度来计算,其他的维度都可以认为是batch维度。这个可用范围更广

假设两个输入的维度分别是input=(1000×500×99×11)input=(1000\times 500 \times 99 \times\ 11)input=(1000×500×99× 11), other=(500×11×99)other=(500 \times 11 \times\ 99)other=(500×11× 99),那么我们可以认为 乘法torch.matmul(input,other)torch.matmul(input, other)torch.matmul(input,other)首先是进行后两位矩阵乘法得到99×9999\times 9999×99 ,可以广播成为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DHzguPmS-1642437999480)(https://www.zhihu.com/equation?tex=%281000+%5Ctimes+500%29)], 因此最终输出的维度是 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U2kJGZUO-1642437999483)(https://www.zhihu.com/equation?tex=%EF%BC%881000+%5Ctimes+500+%5Ctimes+99+%5Ctimes+99%29)]。

a = torch.randn(4,5)
b = torch.randn(5, 4)
print(torch.matmul(a,b))a = torch.randn(2,4,5)
b = torch.randn(5, 4)
print(torch.matmul(a,b))a = torch.randn(2, 3,4,5)
b = torch.randn(5, 4)
print(torch.matmul(a,b))
  • 扩展稀疏张量矩阵

    Torch支持COO(rdinate)格式的稀疏张量,可以有效地存储和处理大多数元素为零的张量。

    sparse tensor 可以表示为一对 dense tensors:一个张量的value和一个二维的张量 indices一个稀疏张量可以通过提供这两个张量, 以及稀疏张量的大小来构造(从这些张量是无法推导出来的!)假设我们要定义一个稀疏张量, 其中 3在(0,2)处, 4在(1,0)处, 5在(1,2)处, 然后我们可以这样写:

i = torch.LongTensor([[0, 1, 1],[2, 0, 2]])
v = torch.FloatTensor([3, 4, 5])
torch.sparse.FloatTensor(i, v, torch.Size([2,3])).to_dense()结果:0  0  34  0  5
[torch.FloatTensor of size 2x3]
import torchif __name__ == '__main__':# 对应的索引坐标(0,0)是2, (1,0)为3indices = torch.tensor([[0,1],[0,0]])# 也可以写成数组,但是要转置ind = torch.tensor([[0,0],[1,0]])#稀疏矩阵对应的值values = torch.tensor([2,3])# 稀疏矩阵的大小shape = torch.Size((2,2))# 创建稀疏矩阵,传入三个参数s = torch.sparse.FloatTensor(indices,values,shape)s2 = torch.sparse.FloatTensor(ind.t(), values, shape)# 显示对应的稀疏矩阵print(s.to_dense())print(s2.to_dense())print(s)d = torch.tensor([[1,2],[3,4]])e = torch.tensor([[2,3],[2,3]])# 矩阵相乘的时候只能稀疏矩阵在前print(torch.spmm(s,d

参考链接

torch离散矩阵

Torch中的矩阵相乘分类相关推荐

  1. OpenGL之矩阵相乘

    单位矩阵 主对角线上数据都是1,其余元素都是0,即为单元矩阵. 向量 X 单元矩阵 = 向量 X 1,不会发生任何变化. 向量与单元矩阵相乘的前提是:向量的列数 == 单元矩阵的行数 矩阵分类 行优先 ...

  2. svd奇异值分解_矩阵相乘和奇异值分解(SVD)

    关于矩阵相乘 图1.Trefethen, Lloyd N., and David Bau III. Numerical linear algebra. Vol. 50. Siam, 1997.中关于矩 ...

  3. R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能

    R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型(Logistic regression).分类预测器(分类变量)被自动替换为一组虚拟编码变量.summary函数查看检查模型.使用t ...

  4. torch.mul() 和 torch.mm() 区别【矩阵a和b对应位相乘/矩阵相乘】

    torch.mul(a, b)是矩阵a和b对应位相乘,a和b的维度必须相等,比如a的维度是(1, 2),b的维度是(1, 2),返回的仍是(1, 2)的矩阵 torch.mm(a, b)是矩阵a和b矩 ...

  5. matlab非同秩矩阵相乘_MATLAB中的矩阵与向量运算

    4.1 数组运算和矩阵运算 从外观形状和数据结构来看 , 二维数组和数学中的矩阵没有区别 . 但是 , 矩阵作为一种变换或 映射算符的体现 , 矩阵运算有着明确而严格的数学规则 . 而数组运算是 MA ...

  6. ND4J中BaseNDArray的四个矩阵相乘方法小结

    BaseNDArray中有四个矩阵相乘的方法: 1.public INDArray mul(INDArray other) 2.public INDArray muli(INDArray other) ...

  7. tensorflow中向量与矩阵相乘

    我们只当使用tensorflow的tf.matmul()可以进行矩阵间的运算,但是要求矩阵的每一个维度的长度都要大于2,假如我们进行向量与矩阵的乘法时,使用该函数,则会报错. 具体地,我们使用一个2为 ...

  8. 《数学之美》第15章 矩阵运算和文本处理中的两个分类问题

    1 文本和词汇的矩阵 在自然语言处理中,最常见的两个分类问题分别是:将文本按主题归类(比如将所有介绍奥运会的新闻归到体育类)和将词汇表中的字词按意思归类(比如将各种运动的项目名称归成体育一类). 新闻 ...

  9. pytorch 矩阵相乘_深入浅出PyTorch(算子篇)

    Tensor 自从张量(Tensor)计算这个概念出现后,神经网络的算法就可以看作是一系列的张量计算.所谓的张量,它原本是个数学概念,表示各种向量或者数值之间的关系.PyTorch的张量(torch. ...

最新文章

  1. 调整html css表格位置,调整表格中的列宽(CSS / HTML)
  2. 无线可穿戴产品致胜设计六大策略
  3. 多重循环控制练习之班级成绩情况
  4. [MyBatisPlus]通用枚举
  5. 对象属性结构赋值_面向对象之构造器、代码块和内部类
  6. 关于BASYS3给初学者的建议(有关引脚的书写
  7. Window phone7 修改程序语言
  8. 魔域私服怎么老服务器中断,魔域私服技术文章-服务器端比较正确的数据库解释文件...
  9. 网络教学的即时通讯视频
  10. 富友支付富掌柜智能收银系统是怎样的一套系统
  11. Pr剪辑上分攻略---电子相册制作
  12. 医学图像3D目标检测
  13. 慎用!闲鱼APP竟然成为了诈骗犯的庇护所!
  14. C/C++指针的经典笔试面试题
  15. 14款形态各异的超时尚HTML5时钟动画
  16. 怎么提取伴奏?只要三招即可快速搞定,附带详细教程
  17. iApp裕v3语言认识us与ug
  18. android连接小票打印机,打印小票数据的两种模式
  19. 编写一个应用程序:输入长方形的长度、宽度,计算长方形的周长、面积并输出:
  20. shell 编程arry数组

热门文章

  1. 算法作业系列10——Unique Substrings in Wraparound String
  2. IOS AVFoundation的录音与播放
  3. [实践篇]13.10 分析slog2info日志拆解qvm重启过程
  4. Win11左边出菜单怎么弄?Windows11开始菜单放左边怎么设置?
  5. 2020牛客国庆集训派对day1 A.ABB
  6. SGame 新加进程(2)
  7. NS2仿真实验环境组建
  8. 西瓜书对数几率回归公式推导
  9. 艾媒4月APP排行榜 360手机卫士位列安全防护类APP首位
  10. 称通过帮买服务买到泡水车 购车者诉“瓜子网”索赔