pytorch基础知识Tensor算术运算

1、Tensor的基本概念

标量是零维的张量,向量是一维的张量,矩阵是二维的张量

2、Tensor的创建

import torch"""常见的几个tensor创建"""
a = torch.Tensor([[1,2],[3,4]]) #2行2列的
print(a, a.type())  
print(torch.ones(2,3)) #2行3列全为1的
print(torch.eye(2,3))  #2行3列对角线是1,其余是0
print(torch.zeros(2,3)) #2行3列全为0
print(torch.zeros_like(a)) #2行2列全为0,与a结构一致"""生成随机的tensor"""
b = torch.rand(2,2)
print(b, b.type())
"""生成正态分布tensor"""
c = torch.normal(mean=0.0, std=torch.rand(5))
print(c, c.type())d = torch.normal(mean=torch.rand(5), std=torch.rand(5))
print(d, d.type())"""生成均匀分布的tensor"""
e = torch.Tensor(2,2).uniform_(-1,1)
print(e, e.type())"""生成序列"""
f = torch.arange(0, 10, 1)
print(f, f.type())g = torch.linspace(2, 10, 4) #拿到等间隔的4个数字
print(g, g.type())
3、Tensor的属性

torch.dtype

torch.device 代表Tensor创建之后所存储的设备

torch.layout 表示Tensor内存布局的对象(稠密、稀疏张量)

3.1 定义稀疏的张量

torch.sparse_coo_tensor  coo元素表示非零元素的坐标形式

import torchdev = torch.device('cpu')
# dev = torch.device('cuda')# i非0元素坐标,v非0元素值
i = torch.tensor([[0, 1, 2], [0, 1, 2]])
v = torch.tensor([1, 2, 3])
# 稀疏的张量
a = torch.sparse_coo_tensor(i, v, (4,4), dtype=torch.float32, device=dev)# 将稀疏的张量转化为稠密的张量
b = a.to_dense()  print(a)
print("------------------------------------------------")
print(b)#  打印结果
tensor(indices=tensor([[0, 1, 2],[0, 1, 2]]),values=tensor([1., 2., 3.]),size=(4, 4), nnz=3, layout=torch.sparse_coo)
------------------------------------------------
tensor([[1., 0., 0., 0.],[0., 2., 0., 0.],[0., 0., 3., 0.],[0., 0., 0., 0.]])
4、Tensor算术运算
4.1 加法
a + b
torch.add(a, b)
a.add(b)
a.add_(b) #会将结果赋值给a
4.2 减法
a - b
torch.sub(a, b)
a.sub(b)
a.sub_(b) #会将结果赋值给a
4.3 乘法
# 哈达玛积,对应元素相乘
a * b
torch.mul(a, b)
a.mul(b)
a.mul_(b) #会将结果赋值给a
4.4 除法
a / b
torch.div(a, b)
a.div(b)
a.div_(b) #会将结果赋值给a
4.5 矩阵运算
a = torch.ones(2,1)
b = torch.ones(1,2)
torch.mm(a, b)
torch.matmul(a, b)
a @ b
a.mm(b)
a.matmul(b)

 对于高维度的Tensor(dim>2),定义其矩阵乘法仅在最后的两个维度上,要求前面的维度必须保持一致, 运算操作只有torch.matmul()

a = torch.ones(1, 2, 3, 4)
b = torch.ones(1, 2, 4, 3)
print(a.matmul(b))
4.6 Tensor幂运算
torch.pow(a, 2)
a.pow(2)
a**2
a.pow_(2)torch.exp(a) #e的n次方
a.exp_()
4.7 Tensor开平方运算
a.sqrt()
a.sqrt_()
4.8 Tensor对数运算
torch.log(a) #底数是e
torch.log_(a)
torch.log2()
torch.log10()
4.9 pytorch in-place概念,即 “就地操作”,不允许使用临时变量,也称为原位操作

比如以下运算:

x = x + y

sub_、add_、div_、mul_等

4.10 Tensor的广播机制 张量参数可以自动扩展为相同大小

广播机制需要满足两个条件:

1、每个张量至少有一个维度

2、满足右对齐,a+b ,即

a = torch.rand(2,3)
b = torch.rand(3)
print(a+b)  #可以相加,从右向左,b的维度3,那么a的维度要么是3,要么是1a = torch.rand(2,1)
b = torch.rand(3)
print(a+b)  #可以相加a = torch.rand(2,4)
b = torch.rand(3)
print(a+b) #从右向左,b的维度3与a的维度4无法对齐,报错
4.11 Tensor的取余数、取整数
a = torch.rand(2,2)
a = a * 10
print(torch.floor(a)) #向上取整
print(torch.ceil(a)) #向下取整
print(torch.round(a)) #四舍五入
print(torch.trunc(a)) #取整数
print(torch.frac(a)) #取小数
print(a % 2) #取余数
4.12 Tensor的比较运算、排序
"""比较"""
a = torch.rand(2, 3)
b = torch.rand(2, 3)
print(torch.eq(a, b)) 
print(torch.equal(a, b)) #比较shape与元素是否都相同
print(torch.gt(a, b))
print(torch.ge(a, b))
print(torch.le(a, b))
print(torch.lt(a, b))
print(torch.ne(a, b))"""排序"""
a = torch.rand([[1,2,2,5], [2,4,1,3]])
print(torch.sort(a, dim=0, descending=True))  #对第0维排序,降序
print(torch.topk(a, k=2, dim=1)) #返回指定维度上的前k个最大值及其索引
print(torch.kthvalue(a, k=2, dim=0)) # 返回指定维度上的第K个最小值及其索引print(torch.isfinite(a)) #判断是否有界
print(torch.isfinite(a/2)) 
print(torch.isinf(a/0)) #判断是否无界
print(torch.isnan(a)) #是否None
4.13 Tensor的三角函数

4.14 Tensor的其他函数

以下公众号发布python编程技术,感兴趣的可点击关注哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35539.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据平台需要存算分离吗?某保险集团:以 ZBS 优化资源利用率,缩短业务用时超一半

金融机构普遍采用“存算一体”架构支撑基于 Hadoop 框架的大数据平台。而随着金融业务的多元化发展,不同业务对计算和存储的需求差异较大,由于“存算一体”架构共享存储与计算资源,经常会出现资源需求不均衡、资源利用率低下、难以灵活调度等…

c++网络通信

TCP/IP协议 OSI参考模型采用分层划分原则,将网络中的数据传输划分为7层,其中,物理层居于最下层,是最基础、核心的网络硬件层;应用层居于最上层,负责应用资源的管理。每一层使用下层的服务,并向…

程序设计语言前言

1.机器语言及特点 2.编译语言及特点 3.高级语言及特点 4.编译和解释 5.IPO编程方式 一、机器语言 机器语言,也被称为二进制代码语言,是计算机硬件能够直接识别的程序语言或指令代码。它是由一系列由0和1组成的二进制指令码构成,每一条指令码…

drozer中文乱码解决方法

drozer简介 drozer 是 Android 的安全测试框架。 drozer 允许您通过扮演应用的角色并与 Android 运行时、其他应用的 IPC 端点和底层操作系统进行交互来搜索应用和设备中的安全漏洞。 drozer 提供了一些工具来帮助您使用、分享和理解公共 Android 漏洞。 drozer 是开源软件…

ESP32-C2模组数据透传模式配置详细教程

文章目录 1. 背景2. 关键步骤2.1 烧录AT指令固件2.2 配置透传模式2.3 如何退出透传模式重新配置3. 思考1. 背景 最近做的项目中,有蓝牙+WIFI的数据透传的需求,即系统A和系统B之间的通讯通过无线的方式,其实在实际项目中有很多这种场景比如无线调试手柄、无线数据终端、无线…

状态压缩动态规划(State Compression DP)算法详解

状态压缩动态规划(State Compression DP)是一种高效解决组合优化问题的技术,特别适用于那些状态空间较大且可以用二进制表示的情况。本文将详细讲解状态压缩DP的原理、常用的位运算技巧、以及具体的例题分析。 原理概述 状态压缩DP的核心思…

【D3.js in Action 3 精译】1.2 D3 生态系统——入门须知

1.2 D3 生态系统——入门须知 D3.js 从不单打独斗,而是作为 D3 生态系统的一员,与生态内的一系列技术和工具相结合来创建丰富的 Web 界面。与其他网页一样,D3 项目也是充分利用 HTML5 的强大功能在 DOM 内构建出来的。尽管 D3 也可以创建并操…

ElementUI搭建

概述 Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组 件库. 安装 ElementUI npm 安装 推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用。 npm i element-ui -S 在控制台输入此命令来安装ElementUI 在 main.j…

MyPostMan:按照项目管理接口,基于迭代生成接口文档、执行接口自动化联合测试

MyPostMan 是一款类似 PostMan 的接口请求软件,不同于 PostMan 的是,它按照 项目(微服务)、目录来管理我们的接口,基于迭代来管理我们的接口文档,可导出或者在局域网内共享,按照迭代编写自动化测…

netmiko_ssh_华为防火墙

from netmiko import ConnectHandlerip 防火墙ip地址hw_fw {device_type: huawei,host: ip, # 使用 host 字段同时指定 IP 和端口号username: 用户名,password: 密码,port: 50022 # 直接设置 port 字段 }net_connect ConnectHandler(**hw_fw)ou net_connect.send_command…

西安国际医学中心医院 多学科联合创新白癜风治疗法取得进展

近日,西安国际医学中心医院“自体头皮毛囊裂解物混悬液移植治疗白癜风”项目,备受瞩目。据悉,在白癜风和白发的研究及治疗上,均有望取得显著进展。 卢涛主任高分通过医院新技术新业务立项 “白癜风”——是由于皮肤黑素细胞被破坏…

autoware.universe源码略读(3.3)--perception:tensorrt_yolo

autoware.universe源码略读3.3--perception:tensorrt_yolo 模块组成cuda_utils(CUDA接口)calibrator(校准器)ImageStreamInt8EntropyCalibrator mish(mish激活函数,基于CUDA)mish_p…

Python22 Pandas库

Pandas 是一个Python数据分析库,它提供了高性能、易于使用的数据结构和数据分析工具。这个库适用于处理和分析输入数据,常见于统计分析、金融分析、社会科学研究等领域。 1.Pandas的核心功能 Pandas 库的核心功能包括: 1.数据结构&#xff…

ODYSSEE加速电机仿真优化

由于对低碳社会的强烈需求,电动汽车(EV)和混合动力汽车(HEV)的数量正在迅速增长。新能源汽车的主要部件是电池、逆变器和电机。电机市场的规模也将不断扩大。为了提高EV的性能,对电机设计工程师的要求越来越高。 除了EV市场,协作机器人市场也…

【Linux】gdb调试器

一、gdb调试器背景 程序的发布方式有两种,debug模式和release模式 Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 二、安装gdb yum install gdb三、使用gdb 在Linux当中g…

Spark运行spark-shell与hive运行时均报错的一种解决方案

环境按照尚硅谷的配置的。 在运行hive的时候,报错代码为30041,无法执行insert语句。 在运行spark-shell的时候,报错,无法进入到shell脚本中。 可能的问题: 对集群设置的域名与集群的主机名称不一致。 例如:…

Cesium入门:Camera的关键知识点

作者: 还是大剑师兰特 ,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。 查看本专栏目录 - 本文是第 078篇文章 文章目录…

快速高效的菲律宾海运攻略

快速高效的菲律宾海运攻略 【14天送达】菲律宾海运攻略来了!你是不是也在为如何将机器发货到菲律宾而烦恼?别担心,今天小编就为大家详细讲解一下整个流程! 第一步:准备货物和文件 首先确保你的机器包装完好无损&#x…

使用c++栈刷题时踩坑的小白错误

根据图片中提供的代码,可以发现以下三处错误: 错误原因:条件判断语句的逻辑错误。 代码行:if (res.top() ! e || res.empty())(第7行) 问题:如果 res 为空(res.empty() 为 true&…

mac卡牌游戏:堆叠大陆 Stacklands for Mac 中文安装包

Stacklands 是一款轻松益智的堆叠游戏。玩家需要在游戏中不断堆叠不同形状和大小的方块,使它们尽可能地稳定地堆放在一起。游戏中有多种不同的关卡和挑战,玩家需要通过合理的堆叠方式来完成每个关卡。游戏画面简洁明快,操作简单直观&#xff…