pytorch基础知识Tensor算术运算

news2024/12/23 11:49:45
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 torch

dev = 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,要么是1

a = 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.coloradmin.cn/o/1865879.html

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

相关文章

在前端开发过程中如果函数参数很多,该如何精简

1. 在前端开发过程中如果函数参数很多,该如何精简 1.1. 对象参数(对象字面量):1.2. 默认参数和解构赋值:1.3. 使用类或构造函数:1.4. 利用闭包或者高阶函数:1.5. 利用ES6的扩展运算符&#xff1…

利用ChatGPT优化程序员工作流程:实用案例分享

近年来,人工智能技术的迅猛发展给各行各业带来了翻天覆地的变化。作为其中的一员,程序员在工作中也受益匪浅。其中,ChatGPT的出现,更是成为优化程序员工作流程的得力助手。本文将通过多个实用案例,分享如何利用ChatGPT…

数据质量低下会造成什么后果?应从哪些维度衡量数据质量?

大数据时代的到来,预示着前所未有的商业机遇和洞察力。然而,要将这些海量数据中蕴含的巨大价值转化为实际的业务成果,一个关键的前提条件是必须确保所收集数据的质量。数据质量是大数据价值链上的第一道关卡,它的高低直接关系到数…

OpenCV中掩膜(mask)图像的创建和使用

操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 功能描述 掩模图像(Mask Image)是一种特殊类型的形象数据,在图像处理和计算机视觉中扮演着重要角色。它通常是一个二维数组…

uniapp H5端使用百度地图

1、登录百度地图开放平台 https://lbsyun.baidu.com/(没有账号则先去创建一个百度账号) 2、进入百度地图开放平台控制台(导航栏“控制台”),点击“应用管理”-“我的应用” 3、选择“创建应用”,应用模块选…

还不会找1688对标竞品?那你别说自己是做运营的

如何找正确的对标竞品 找到竞品→模仿竞品→学习竞品 找到正确的对标竞品,是至关重要的一个环节,如果你想要把流量做起来,却没找到正确的对标竞品是完全不可能的。因为你没有对标,你就完全不知道同行做什么动作才有流量&#xf…

Opencv学习项目2——pytesseract

上一次我们使用pytesseract.image_to_boxes来检测字符,今天我们使用pytesseract.image_to_data来检测文本并显示 实战教程 和上一次一样,添加opencv-python和pytesseract库 首先我们先来了解一下pytesseract.image_to_data pytesseract.image_to_data(…

k8s手撕架构图+详解

“如果您在解决类似问题时也遇到了困难,希望我的经验分享对您有所帮助。如果您有任何疑问或者想分享您的经历,欢迎在评论区留言,我们可以一起探讨解决方案。祝您在编程路上顺利前行,不断突破技术的难关,感谢您的阅读&a…

MySQL 超出月份最大日期(工作总结)

前几天帮同事修改了一个bug&#xff0c;这个bug是怎么造成的呢。先来看需求&#xff0c;系统需要统计某个月份的数据。很简单的一个需求。 同事的写的MySQL语句 SELECTREPLACE(FORMAT(sum(count_value),2), ,, ) as value,<if test"type day">count_date as…

Vue-内容渲染,属性渲染指令

内容渲染 在Vue中渲染元素&#xff0c;用双花括号{{}}的语法进行插值&#xff0c;称之为插值表达式 双花括号会渲染hi里面的值 <body><div id"app">{{hi}}</div> <script>const vm{data(){return{hi:hello world}}}const appVue.createAp…

【containerd】Containerd高阶命令行工具nerdctl

前言 对于习惯了使用docker cli的用户来说&#xff0c;containerd的命令行工具ctr使用起来不是很顺手&#xff0c;此时别慌&#xff0c;还有另外一个命令行工具项目nerdctl可供我们选择。 nerdctl是一个与docker cli风格兼容的containerd的cli工具。 nerdctl已经作为子项目加入…

u盘插到另一台电脑上数据丢失怎么办?提供实用的解决方案

在现代数字化生活中&#xff0c;U盘作为一种便携式存储设备&#xff0c;承载着我们重要的数据和信息。然而&#xff0c;有时当我们将U盘插入另一台电脑时&#xff0c;可能会遇到数据丢失的棘手问题。这可能是由于多种原因造成的&#xff0c;那么&#xff0c;U盘插到另一台电脑上…

cs与msf权限传递,与mimikatz抓取win2012明文密码

CS与MSF的权限互相传递抓取windows2012的明文密码 CS与MSF的权限互相传递 1、启动cs服务端 2、客户端连接 3、配置监听&#xff0c;并设置监听端口为9999 4、生成脚本 5、开启服务&#xff0c;下载并运行木马 已获取权限 6、进入msf并设置监听 7、cs新建监听&#xff0c;与m…

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览 2024/6/26 15:15 4.2.1 全编译测试 在源码路径内&#xff0c;提供了编译脚本 build.sh&#xff0c;运行该脚本对整个源码进行编译&#xff0c;需要在终端切换到解压 出来的源码路径&#xff0c;找到 build.sh 文件…

海纳斯 hinas 的hi3798mv100 华为悦盒 6108v9 安装wifi模块

hi3798mv100安装wifi模块 1.执行脚本 &#xff0c;执行完毕后重启服务器2. 继续执行脚本3.检查网卡驱动安装是否正确4.查看网卡安装状态5.连接wifi结尾 1.执行脚本 &#xff0c;执行完毕后重启服务器 bash <(curl -sSL https://gitee.com/xjxjin/scripts/raw/main/install_…

【LeetCode】三、队列相关:最近的请求次数

文章目录 1、队列结构2、leetcode933&#xff1a;最近的请求次数 1、队列结构 先进先出 时间复杂度&#xff1a; Java中&#xff0c;LinkedList集合可以当一个队列来用&#xff1a; 2、leetcode933&#xff1a;最近的请求次数 很逆天的题目描述&#xff0c;就是不同时间会有请…

关于WebSocket

WebSocket 与传统的 HTTP 协议对比 在实时通信领域&#xff0c;传统的 HTTP 协议存在以下一些问题&#xff1a; 频繁的请求和响应&#xff1a;每次通信都需要建立和关闭连接&#xff0c;带来额外的开销。高延迟&#xff1a;每次通信都需要经过多个网络层的传输&#xff0c;延…

【仿真】UR机器人手眼标定与实时视觉追踪(单目)

这段代码实现了一个机器人视觉引导系统,主要功能包括: 连接仿真环境,控制UR机器人。相机标定: 使用棋盘格图案进行相机内参标定通过移动机器人采集多组图像使用calibrateCamera函数计算相机内参 手眼标定: 采集机器人末端位姿和对应的棋盘格图像使用calibrateHandEye函数计算相…

外汇的基本面分析需要关注什么?

外汇基本面分析的核心在于关注可能影响单一货币供求及国家货币价值的经济、社会和地缘政治事件与趋势。但值得注意的是&#xff0c;这些事件和因素往往具有更广泛的影响力&#xff0c;不仅限于单一国家。它们可能是影响整个地区或国家集团的重要事件&#xff0c;甚至一些事件&a…

植物大战僵尸杂交版技巧大全(附下载攻略)

《植物大战僵尸杂交版》为策略游戏爱好者带来了全新的挑战和乐趣。如果你是新手玩家&#xff0c;可能会对游戏中的植物和僵尸感到困惑。以下是一些实用的技巧&#xff0c;帮助你快速掌握游戏并享受其中的乐趣。 技巧一&#xff1a;熟悉基本玩法 游戏的基本玩法与原版相似&…