张量乘积运算实例

2024-09-06 14:12
文章标签 实例 运算 张量 乘积

本文主要是介绍张量乘积运算实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

a = torch.tensor([[1, 2, 2], [3, 4, 4]])
b = torch.tensor([[1, 2, 2], [3, 4, 4], [5, 6, 6]])

张量a的维度是2x3,张量b的维度是3x3。根据矩阵乘法的规则,a的列数(3)与b的行数(3)相等,所以这两个张量可以进行矩阵乘法运算。

矩阵乘法的结果c的维度将是a的行数乘以b的列数,即2x3矩阵乘以3x3矩阵将得到一个2x3的矩阵。

矩阵乘法的计算方式是: 对于结果矩阵c中的每一个元素c[i][j],它是通过取a的第i行与b的第j列的对应元素的乘积之和得到的。

具体计算如下:

[0][0] = a[0][0]*b[0][0] + a[0][1]*b[1][0] + a[0][2]*b[2][0] = 1*1 + 2*3 + 2*5 = 1 + 6 + 10 = 17 c[0][1] = a[0][0]*b[0][1] + a[0][1]*b[1][1] + a[0][2]*b[2][1] = 1*2 + 2*4 + 2*6 = 2 + 8 + 12 = 22 c0][2] = a[0][0]*b[0][2] + a[0][1]*b[1][2] + a[0][2]*b[2][2] = 1*2 + 2*4 + 2*6 = 2 + 8 + 12 = 22 c[1][0] = a[1][0]*b[0][0] + a[1][1]*b[1][0] + a[1][2]*b[2][0] = 3*1 + 4*3 + 4*5 = 3 + 12 + 20 = 35 c[1][1] = a[1][0]*b[0][1] + a[1][1]*b[1][1] + a[1][2]*b[2][1] = 3*2 + 4*4 + 4*6 = 6 + 16 + 24 = 46 c[1][2] = a[1][0]*b[0][2] + a[1][1]*b[1][2] + a[1][2]*b[2][2] = 3*2 + 4*4 + 4*6 = 6 + 16 + 24 = 46 

所以,结果矩阵c将会是:

[[17, 22, 22], [35, 46, 46]] 

实例2:

a = torch.tensor([[1, 2, 2], [3, 4, 4]])

b = torch.tensor([[1, 2, 2,3], [3, 4, 4,5], [5, 6, 6,6]])

张量a的维度仍然是2x3,但是张量b的维度现在是3x4(因为每一行有4个元素)。矩阵乘法的规则仍然适用,即第一个张量的列数必须等于第二个张量的行数。

由于a的列数(3)与b的行数(3)相等,这两个张量可以进行矩阵乘法运算。结果矩阵c的维度将是a的行数乘以b的列数,即2x4的矩阵。

矩阵乘法的计算方式与之前相同,对于结果矩阵c中的每一个元素c[i][j],它是通过取a的第i行与b的第j列的对应元素的乘积之和得到的。

具体计算如下:

c[0][0] = a[0][0]*b[0][0] + a[0][1]*b[1][0] + a[0][2]*b[2][0] = 1*1 + 2*3 + 2*5 = 1 + 6 + 10 = 17 
c[0][1] = a[0][0]*b[0][1] + a[0][1]*b[1][1] + a[0][2]*b[2][1] = 1*2 + 2*4 + 2*6 = 2 + 8 + 12 = 22 
c[0][2] = a[0][0]*b[0][2] + a[0][1]*b[1][2] + a[0][2]*b[2][2] = 1*2 + 2*4 + 2*6 = 2 + 8 + 12 = 22 
c[0][3] = a[0][0]*b[0][3] + a[0][1]*b[1][3] + a[0][2]*b[2][3] = 1*3 + 2*5 + 2*6 = 3 + 10 + 12 = 25 
c[1][0] = a[1][0]*b[0][0] + a[1][1]*b[1][0] + a[1][2]*b[2][0] = 3*1 + 4*3 + 4*5 = 3 + 12 + 20 = 35c[1][1] = a[1][0]*b[0][1] + a[1][1]*b[1][1] + a[1][2]*b[2][1] = 3*2 + 4*4 + 4*6 = 6 + 16 + 24 = 46c[1][2] = a[1][0]*b[0][2] + a[1][1]*b[1][2] + a[1][2]*b[2][2] = 3*2 + 4*4 + 4*6 = 6 + 16 + 24 = 46 
c[1][3] = a[1][0]*b[0][3] + a[1][1]*b[1][3] + a[1][2]*b[2][3] = 3*3 + 4*5 + 4*6 = 9 + 20 + 24 = 53 

所以,结果矩阵c将会是:

[17, 22, 22, 25], [35, 46, 46, 53]]

实例3:

  如果是mul运算呢?a和b两个张量必须形状相同,例如都是2*3,则对应的行和列分别乘积运算,得到的张量c还是2*3

例如 a = torch.tensor([[1, 2, 3], [3, 4, 5]])
   b = torch.tensor([[5, 6, 7], [7, 8, 9]])

   c=torch.mul(a,b)

使用mul操作符进行逐元素乘法的结果将会是:

[1*5, 2*6, 3*7], [3*7, 4*8, 5*9]]

也就是c[i][j]=a[i][j]*b[i][j]

这篇关于张量乘积运算实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142225

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中,位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位,而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别,并给出相应示例。 应用场景了解 位运算和逻辑运算的设计初衷源自计算机底层硬件和逻辑运算的需求,它们分别针对不同的处理对象和场景。以下是它们设计的初始目的简介:

位运算:带带孩子吧,孩子很强的!

快速进制 在聊到位运算之前,不妨先简单过一遍二进制的东西。熟悉二进制和十进制的快速转换确实是掌握位运算的基础,因为位运算直接在二进制位上进行操作。如果不熟悉二进制表示,很难直观理解位运算的效果。 这里主要涉及二进制和十进制之间的互相转换。 十进制转二进制 十进制转二进制可以使用常见的 除2取余法 进行。每次将十进制除以2并记录所得余数,直到商为0,然后再将记录的余数 从下往上排列即

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S