首页 > 其他分享 >Pytorch张量的数学运算:向量基础运算

Pytorch张量的数学运算:向量基础运算

时间:2024-04-07 21:59:03浏览次数:21  
标签:运算 torch 张量 Pytorch 数组 print tensor2 norm tensor1

文章目录

参考:与凤行

  张量的数学运算是深度学习和科学计算中的基础。张量可以被视为一个多维数组,其在数学和物理学中有广泛的应用。这些运算包括但不限于加法、减法、乘法、除法、内积、外积、张量积、索引、切片以及各种变换等。运算的结果都是一个张量。 一维张量被称作向量。 下面,我们会详细介绍这些基础运算。

一、简单运算

import torch
tensor1=torch.tensor([1,2,3,4,5])
tensor2=torch.tensor([5,4,3,2,1])
  • 1.加法+
    • 对应位置的元素相加
    • 要求参与运算的张量形状相同
print("加法结果:",tensor1+tensor2)

在这里插入图片描述

  • 2.减法-
    • 对应位置的元素相减
    • 要求参与运算的张量形状相同
print("减法结果:",tensor1-tensor2)

在这里插入图片描述

  • 3.逐元素乘法*
    • 对应位置的元素相乘
    • 要求参与运算的张量形状相同
print("乘法结果:",tensor1*tensor2)

在这里插入图片描述

  • 3.逐元素除法/
    • 对应位置的元素相除
    • 要求参与运算的张量形状相同
print("除法结果:",tensor1/tensor2)

在这里插入图片描述

  • 5.数乘,标量乘法*
    • 标量乘以张量的每一个元素
print("数乘结果:",2*tensor1)
print("数乘结果:",2*tensor2)

在这里插入图片描述

  • 6.点积@
    • 和数学上向量的点积效果一致
    • 用于计算两个矩阵乘法 或 向量的点积
    • 要求参与运算的张量形状相同
print("点积结果:",tensor1@tensor2)

在这里插入图片描述

二、广播运算

  广播(Broadcasting)是一种在不同形状的数组(张量)之间进行数学运算的方法,它允许逐元素操作自动扩展到不匹配的数组形状,无需显式复制数据。广播规则可以简化数组操作,使代码更简洁,同时提高运算效率。这在NumPy、TensorFlow、PyTorch等科学计算和深度学习库中非常常见。

1.广播的基本规则

广播遵循以下三条规则:

  1. 规则1:如果两个数组的维数不相同,那么小维度数组的形状将会在最左边补1。

    举例来说,如果你有一个256×256×3的数组(比如一张256x256像素的彩色图像,3表示颜色通道)和一个3的数组(表示每个颜色通道的缩放因子),那么这个小维度数组的形状会在最左边补1直到两个数组的维数相同,即小数组的形状会被视为1 ×1 × 3。

  2. 规则2:对于每个维度,如果一个数组的大小在该维度上为1,而另一个数组的大小在该维度上大于1,那么首先数组会在该维度上扩展以匹配另一个数组的大小。

    继续上面的例子,1 ×1 × 3的数组在前两个维度上大小为1,会被扩展为与另一个数组在这些维度上的大小相同,即扩展为256×256×3。

  3. 规则3:如果在所有维度上,大小匹配或其中一个数组的大小为1,则认为它们是兼容的。如果在某个维度上,两个数组的大小既不相等也不是其中一个为1,则会抛出异常,因为它们被认为是不兼容的。

    在规则1和规则2的帮助下,大部分时候数组都能够兼容。但如果两个数组在某个维度上都不为1且不相等,比如一个形状为(2,3)的数组和一个形状为(3,3)的数组,那么它们就无法通过广播兼容。

2.广播操作的例子

假设我们有一个4×3的矩阵A,想要逐元素加上一个长度为3的向量v,即对A的每一行都加上v。按照传统方法,我们可能需要通过循环来实现;但利用广播,这个操作可以自动完成。

import torch
tensor1=torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
tensor2=torch.tensor([1, 0, 1])
# A是一个4x3的矩阵,v是一个长度为3的向量

# 通过广播,将v加到A的每一行上
 # 利用广播,无需显式扩展v的形状
print("广播加法结果:\n",tensor1+tensor2)
print("广播乘法结果:\n",tensor1*tensor2)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里,v的形状被自动扩展到与A一致,实际上相当于v被复制成了一个4×3的矩阵,然后与A进行逐元素相加。

三、运算函数

import torch
tensor1=torch.tensor([1,2,3,4,5])
tensor2=torch.tensor([5,4,3,2,1])
  • 加法torch.add()
    • 和直接加法是一样效果的,直接加法进行了函数重载而已。
print("加法结果:",torch.add(tensor1,tensor2))

在这里插入图片描述

  • 减法torch.sub()
print("减法结果:",torch.sub(tensor1,tensor2))

在这里插入图片描述

  • 乘法torch.mul()
print("乘法结果:",torch.mul(tensor1,tensor2))

在这里插入图片描述

  • 除法torch.div()
print("除法结果:",torch.div(tensor1,tensor2))

在这里插入图片描述

  • 点积torch.dot()
    • 和数学上向量的点积效果一致
    • 用于计算两个一维张量的点积
    • 要求参与运算的张量形状相同
print("点积结果:",torch.dot(tensor1,tensor2))

在这里插入图片描述

  • 高维张量的点积torch.matmul()

    • 用于计算矩阵乘法
  • 外积torch.cross()

    • 外积(叉积)是定义在两个三维向量上的二元运算,结果是一个向量,而不是点积的标量结果。外积的结果向量垂直于原来的两个向量(假设两个原向量不平行),并遵循右手规则(即当你的右手的四指从第一个向量通过最短角度旋转到第二个向量时,你的大拇指指向的方向就是外积向量的方向)。
    • 和数学上的外积一样
    • 长度是原始向量 a 和 b 构成的平行四边形的面积。
import torch
tensor1=torch.tensor([1,2,3])
tensor2=torch.tensor([4,5,6])
print("外积结果:",torch.cross(tensor1,tensor2))

在这里插入图片描述

  • 范数torch.norm()
    • norm默认计算L2范数(欧几里得距离)。
    • vector_norm: Expected a floating point or complex tensor as input.(期望一个浮点或复数张量作为输入)
import torch
x = torch.tensor([1.0, -2.0, 3.0])
#等价于x = torch.tensor([1, -2, 3],dtype=torch.float)
# 计算L1范数
l1_norm = torch.norm(x, p=1)
print("L1 norm:", l1_norm)
# 计算L2范数
l2_norm = torch.norm(x, p=2)#等价于l2_norm = torch.norm(x)
print("L2 norm:", l2_norm)
# 计算无穷范数
inf_norm = torch.norm(x, p=float('inf'))
print("Infinity norm:", inf_norm)

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

标签:运算,torch,张量,Pytorch,数组,print,tensor2,norm,tensor1
From: https://blog.csdn.net/m0_63997099/article/details/137457360

相关文章

  • 使用位运算进行加法运算
    题目大意给你两个整数,求a+b,结果不会超过32位整数,但不能用+、-、*、/等运算符!思路①异或运算=无进位和(a^b)②单独提取进位:(a&b)<<1③无进位和+进位=答案Python,Java,C++等语言中的数字都是以补码形式存储的。但Python没有int,long等不同长度变量,即在编程......
  • JavaScript中,...(三个点)是扩展运算符
    在JavaScript中,...(三个点)是扩展运算符(SpreadOperator)和剩余参数(RestParameters)的语法。它确实可以用来“展开”对象的属性或数组的元素。展开对象的属性对于对象,扩展运算符可以用来将一个对象的所有可枚举属性复制到新对象中,或者与现有的对象属性合并。javascript复制代码......
  • Python学习(七):基础运算符与表达式【详解】
    文章目录python基础运算符与表达式运算符与表达式的优先级算术运算符(四则运算)算术运算符(取余/模、乘方)关系比较运算符位运算符逻辑运算符赋值运算符、复合赋值运算符条件表达式await序列切片表达式星号表达式yield表达式lambda表达式python基础运算符与表达式运算符......
  • Pytorch实用教程:Pytorch中enumerate(test_loader, start=0)的解释
    文章目录1.Pytorch中的enumerate(test_loader,0)数据加载器`test_loader``enumerate(test_loader,0)`数据解包`inputs,labels=data`总结2.python中enumerate的用法基本用法示例遍历列表使用不同的起始索引在字典上使用为什么使用`enumerate`?1.Pytorch......
  • C语言04-运算符、流程控制(分支控制、循环控制语句)
    第7章运算符7.5赋值运算符——副作用针对左操作数1.赋值运算符有副作用,针对左边操作数2.左边操作数必须是变量的形式,右边操作数可以是常量、变量、表达式eg:c+=3; //等价于c=c+3;//从右向左赋值intx=num=100;7.6三元运算符a?b:c;表达......
  • 数据的表示与运算1
    2.1数值与编码2.1.1进位计数制及其互相转换[注意!!] 2018考察二进制编码的原因:计算机只有两种状态,0和1可以被稳定并简单的表达。成本低1和0正好对应逻辑上的真和假,为逻辑判断提供便利条件二进制的编码和运算规则简单,可以利用逻辑门电路方便实现[总结] 利用二进制......
  • python_列表推导式_矩阵运算
    带条件的列表推导式even_number=[iforiinrange(10)ifi%2==0]even_number#output[0,2,4,6,8][0,2,4,6,8]列表推导式的嵌套matrix=[[i*jforiinrange(1,4)]forjinrange(1,4)]matrix#output=[[1,2,3],[2,4,6],[3,6,9]][[1,......
  • C语言03-数据类型、运算符
    第6章数据类型6.5获取数据存储大小sizeof 运算符,可以计算出指定数据的字节大小结果是size_t类型的数据,对应的格式占位符是%zu使用说明:计算指定数据的字节大小1、sizeof和数据类型名称一起使用eg:printf("char:%zu\n",sizeof(char));2、sizeof和变量......
  • Pytorch入门实战: 04-猴痘病识别
    ......
  • 异或运算在算法中的神奇应用
    1.什么是异或两个二进制数进行异或运算时,每一位上的数相同则结果为0,不同则结果为1。示例:6^7=?转化成二进制:6=1107=1116^7=110^111=001=1简单记:异或就是二进制的无进位相加。还有个同或运算:相同为1,不同为0,和异或是反的。2.异或运算的特性任何数与0异或,结果还是这......