Pytorch Tensor基本数学运算

2023-05-16

1. 加法运算

示例代码:

import torch

# 这两个Tensor加减乘除会对b自动进行Broadcasting
a = torch.rand(3, 4)
b = torch.rand(4)

c1 = a + b
c2 = torch.add(a, b)
print(c1.shape, c2.shape)
print(torch.all(torch.eq(c1, c2)))

输出结果:

torch.Size([3, 4]) torch.Size([3, 4])
tensor(1, dtype=torch.uint8)

2. 减法运算

示例代码:

a = torch.rand(3, 4)
b = torch.rand(4)

c1 = a - b
c2 = torch.sub(a, b)
print(c1.shape, c2.shape)
print(torch.all(torch.eq(c1, c2)))

输出结果:

torch.Size([3, 4]) torch.Size([3, 4])
tensor(1, dtype=torch.uint8)

3. 哈达玛积(element wise,对应元素相乘)

示例代码:

c1 = a * b
c2 = torch.mul(a, b)
print(c1.shape, c2.shape)
print(torch.all(torch.eq(c1, c2)))

输出结果:

torch.Size([3, 4]) torch.Size([3, 4])
tensor(1, dtype=torch.uint8)

4. 除法运算

示例代码:

c1 = a / b
c2 = torch.div(a, b)
print(c1.shape, c2.shape)
print(torch.all(torch.eq(c1, c2)))

输出结果:

torch.Size([3, 4]) torch.Size([3, 4])
tensor(1, dtype=torch.uint8)

5. 矩阵乘法

(1)二维矩阵相乘

二维矩阵乘法运算操作包括torch.mm()、torch.matmul()、@,

示例代码:

import torch

a = torch.ones(2, 1)
b = torch.ones(1, 2)
print(torch.mm(a, b).shape)
print(torch.matmul(a, b).shape)
print((a @ b).shape)

输出结果:

torch.Size([2, 2])
torch.Size([2, 2])
torch.Size([2, 2])

(2)多维矩阵相乘

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

示例代码:

c = torch.rand(4, 3, 28, 64)
d = torch.rand(4, 3, 64, 32)
print(torch.matmul(c, d).shape)

输出结果:

torch.Size([4, 3, 28, 32])

注意,在这种情形下的矩阵相乘,前面的"矩阵索引维度"如果符合Broadcasting机制,也会自动做广播,然后相乘。

示例代码:

c = torch.rand(4, 3, 28, 64)
d = torch.rand(4, 1, 64, 32)
print(torch.matmul(c, d).shape)

输出结果:

torch.Size([4, 3, 28, 32])

6. 幂运算

示例代码:

import torch

a = torch.full([2, 2], 3)

b = a.pow(2)  # 也可以a**2
print(b)

输出结果:

tensor([[9., 9.],
        [9., 9.]])

7. 开方运算

示例代码:

c = b.sqrt()  # 也可以a**(0.5)
print(c)

d = b.rsqrt()  # 平方根的倒数
print(d)

输出结果:

tensor([[3., 3.],
        [3., 3.]])
tensor([[0.3333, 0.3333],
        [0.3333, 0.3333]])

8.指数与对数运算

注意log是以自然对数为底数的,以2为底的用log2,以10为底的用log10

示例代码:

import torch

a = torch.exp(torch.ones(2, 2))  # 得到2*2的全是e的Tensor
print(a)
print(torch.log(a))  # 取自然对数

输出结果:

tensor([[2.7183, 2.7183],
        [2.7183, 2.7183]])
tensor([[1., 1.],
        [1., 1.]])

 

9.近似值运算

示例代码:

import torch

a = torch.tensor(3.14)
print(a.floor(), a.ceil(), a.trunc(), a.frac())  # 取下,取上,取整数,取小数
b = torch.tensor(3.49)
c = torch.tensor(3.5)
print(b.round(), c.round())  # 四舍五入

输出结果:

tensor(3.) tensor(4.) tensor(3.) tensor(0.1400)
tensor(3.) tensor(4.)

10. 裁剪运算

即对Tensor中的元素进行范围过滤,不符合条件的可以把它变换到范围内部(边界)上,常用于梯度裁剪(gradient clipping),即在发生梯度离散或者梯度爆炸时对梯度的处理,实际使用时可以查看梯度的(L2范数)模来看看需不需要做处理:w.grad.norm(2)

示例代码:

import torch

grad = torch.rand(2, 3) * 15  # 0~15随机生成
print(grad.max(), grad.min(), grad.median())  # 最大值最小值平均值

print(grad)
print(grad.clamp(10))  # 最小是10,小于10的都变成10
print(grad.clamp(3, 10))  # 最小是3,小于3的都变成3;最大是10,大于10的都变成10

 输出结果:

tensor(14.7400) tensor(1.8522) tensor(10.5734)
tensor([[ 1.8522, 14.7400,  8.2445],
        [13.5520, 10.5734, 12.9756]])
tensor([[10.0000, 14.7400, 10.0000],
        [13.5520, 10.5734, 12.9756]])
tensor([[ 3.0000, 10.0000,  8.2445],
        [10.0000, 10.0000, 10.0000]])

 

参考链接:https://blog.csdn.net/sinat_33761963/article/details/84502938

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pytorch Tensor基本数学运算 的相关文章

  • flutter doctor出现Windows Version (Unable to confirm if installed Windows version is的问题

    问题描述 Windows Version span class token punctuation span Unable to confirm span class token keyword if span installed Wind
  • [!] Gradle threw an error while downloading artifacts from the network. Retrying to download... Runn

    Gradle threw an error while downloading artifacts from the network Retrying to download Runn 报这个错 把zip包直接放到c盘某个位置 并更改and
  • idea控制台乱码问题

    idea控制台乱码问题 在环境变量上增加 JAVA TOOL OPTIONS 61 Dfile encoding 61 UTF8 然后idea重新打开即可
  • 如何清除/重置一枚NFC标签教程

    如果您的NFC标签已经写入了数据 xff0c 然后您又想把他清除或者重置 xff0c 请按照如下教程 1 首先下载APP xff0c TagWriter xff0c 这是芯片厂商NXP官方推出的APP xff0c 可以说是最权威的 xff0
  • 树莓派系列教程:红外遥控

    网上淘到了一个红外接收器 xff08 HX1838 43 NEC编码红外遥控器 xff09 和一个红外遥控器 xff0c 准备放到树莓派上学习一下红外控制 img http dl2 iteye com upload attachment 0
  • JavaFX Alert对话框

    1 标准对话框 消息对话框 br Alert alert 61 new Alert AlertType INFORMATION br alert setTitle 34 Information Dialog 34 br alert setH
  • 操作系统原理与实践5--内核栈切换的进程切换

    基于内核栈切换的进程切换 难度系数 xff1a 实验目的 深入理解进程和进程切换的概念 xff1b 综合应用进程 CPU管理 PCB LDT 内核栈 内核态等知识解决实际问题 xff1b 开始建立系统认识 实验内容 现在的Linux 0 1
  • 陀螺仪、加速计、磁力计等传感器汇总

    陀螺仪就是内部有一个陀螺 xff0c 它的轴由于陀螺效应始终与初始方向平行 xff0c 这样就可以通过与初始方向的偏差计算出实际方向 手机里陀螺仪实际上是一个结构非常精密的芯片 xff0c 内部包含超微小的陀螺 加速计是用来检测手机受到的加
  • STM32 HAL库串口+DMA接收不定长数据

    在串口通信中 xff0c 很多时候我们需要的是接收一帧不确定长度的数据 xff0c 而不是单个字节或者固定长度 xff0c 这时我们就需要利用STM32的空闲中断 xff08 IDLE xff09 来实现不定长数据的接收 xff0c 首先我
  • cmake学习之道

    cmke命令格式 cmake 选项 路径 最主要的选项 D 添加变量及值 使用案列 xff08 cmake D ARM BUILD 61 1 xff09 表示在当前路径执行Cmake命令并将ARM BUILD的值传到CMakeLists t
  • 20230312在Ubuntu18.04下的安装Chrome

    20230312在Ubuntu18 04下的安装Chrome 2023 3 12 23 42 百度搜索 xff1a chrome ubuntu 参考资料 xff1a https blog csdn net howard2005 articl
  • ubuntu下查看服务器的CPU详细情况(分色排版)

    https www cnblogs com liuq p 5623565 html 全面了解 Linux 服务器 1 查看 Linux 服务器的 CPU 详细情况 ubuntu下查看服务器的CPU详细情况 大文实验室 大文哥 壹捌陆捌零陆捌
  • 为什么.h文件中只能申明不能定义全局变量

    最近使用keil编写下位机单片机程序 xff0c 打算进行模块化的设计 xff0c 遇到了在 h文件中定义全局变量报错的问题 原因 因为C语言的include是直接将文件嵌入到include这个地方的 如果多次包含这个头文件 xff0c 就
  • 跨系统传递 traceId(日志)

    34 新项目查日志太麻烦 xff0c 多台机器之间查来查去 xff0c 还不知道是不是同一个请求的 打印日志时使用 MDC 在日志上添加一个 traceId xff0c 那这个 traceId 如何跨系统传递呢 xff1f 34 1 背景
  • ThreadLocal 适合用在哪些实际生产的场景中?

    在通常的业务开发中 xff0c ThreadLocal有两种典型的使用场景 场景1 xff0c ThreadLocal 用作保存每个线程独享的对象 xff0c 为每个线程都创建一个副本 xff0c 这样每个线程都可以修改自己所拥有的副本 而
  • SpringCloud 分布式事务组件之Seata

    目录 背景介绍什么是分布式事务什么叫做逆向补偿呢互联网最流行的分布式事务组件seata总结 背景 大家好 xff0c 今天给大家分享一个在2022年出去面试Java几乎必问的一个技术 xff0c 那就是seata 什么 xff1f xff1
  • 接口优化方案

    1 批量思想 xff1a 批量操作数据库 优化前 xff1a for循环单笔入库 for TransDetail detail transDetailList insert detail 优化后 xff1a batchInsert tran
  • springboot前端传一个对象后台怎么接受

    34 courseId 34 3 34 userId 34 34 1234456676 34 34 list 34 34 id 34 34 1 34 34 answer 34 34 B 34 34 id 34 34 1 34 34 answ
  • 前端传一个数组或者集合后台怎么接受

    34 id 34 34 1 34 34 answer 34 34 A 34 34 id 34 34 1 34 34 answer 34 34 A 34 这样的可以直接用一个 64 RequesBody List lt QuestionBac
  • Java8处理List的双层循环

    Java处理List的双层循环程序员经常遇到 xff0c 一般都是当两个List某个值满足某条件时候 xff0c 进行相应的处理 xff1b 1 list和map之间的相互转换 两个List对象当id相同的时候 注意是两个对象 而非两个集合

随机推荐

  • java如何抛出异常

    1 什么时候抛出异常 如果你觉得某些 问题 解决不了了 xff0c 那么你就可以抛出异常了 比如 xff0c 你在写一个service 其中在写到某段代码处 你发现可能会产生问题 xff0c 那么就请抛出异常吧 xff0c 相信我 xff0
  • 发送短信验证码过于频繁问题的解决

    1 对请求的接口做了一个限流的控制 2 利用到 AOP redis 定时器 3 在请求的congtroller层上加相应的注解就可以 具体的Demo工程如下 package com weigu xiaochuang project impo
  • spring的controller是单例还是多例

    我们经常说单例还是多例 那么究竟他们不同的根源在哪 或者说我们应该从哪一方面具体的去理解了 至于这个问题 今天做一个小的探讨 其实我们最终说的是 64 auowired注解的引入的service或mapper是不是单例还是多例的 这个是这个
  • 多线程-批量获取多条线程的执行结果

    当向线程池提交callable任务后 xff0c 我们可能需要一次性获取所有返回结果 xff0c 有三种处理方法 方法一 xff1a 自己维护返回结果 创建一个线程池 ExecutorService executorService 61 E
  • nautilus命令介绍

    nautilus 图形化桌面包括了一个叫做 Nautilus 的文件管理器 在GNOME中是Nautilus 鹦鹉螺 xff0c 而KDE中是Konqueror
  • 写个strcat函数

    include 34 stdio h 34 include lt string h gt void stracat char a char b char temp 128 char p 61 temp int alen 61 strlen
  • linux 下 tcp client的 demo

    include lt stdio h gt include lt stdlib h gt include lt string h gt include lt unistd h gt include lt sys socket h gt in
  • 解决MATLAB2020B关于找不到vs2019C++编译器问题

    在配置matlab 深度学习环境过程中 xff0c 出现找不到vs219C 43 43 编译器 问题 xff0c 尝试了各种办法 xff0c 还是失败 xff0c 经过摸索和结合他人经验 xff0c 最终成功 xff0c 予以总结 xff0
  • Ubuntu下使用w3m命令行模式浏览网页

    w3m是一个基于文本的网页浏览器 xff0c 支持多种操作系统 xff0c 在命令行终端可以很好的支持中文 即使在没有鼠标支持的情况下也可以检查网页的输出 我们一般用Ubuntu的X Windows来看图形界面的东西 xff0c 有没有想过
  • CC3D飞控说明书/使用手册

    CC3D飞控说明书 使用手册openpilot librepilot CC硬件配置 记得点赞哦 xff01 xff01 xff01
  • 串口服务器的原理及使用方法

    串口服务器是将来自TCP IP协议的数据包 xff0c 解析为串口数据流 xff1b 反之 xff0c 也可以将串口数据流打成TCP IP协议的数据包 xff0c 从而实现数据的网络传输 它能多个串口设备连接并能将串口数据流进行选择和处理
  • tcpdump命令

    tcpdump tcpdump命令介绍 tcpdump xff0c 用简单的语言概括就是dump the traffic on a network xff0c 是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工
  • 小程序登录后,接口调用失败返回401

    问题描述 xff1a 小程序登录后 xff0c 所有的内部接口不可调用 xff0c 全部授权失败 xff0c 接口返回401 xff1b 解决办法 xff1a 服务端清缓存就可以了 微信开发者工具中 xff0c 小程序多次登录 xff0c
  • 车牌识别算法 基于yolov5的车牌检测+crnn中文车牌识别 支持12种中文车牌识别

    yolov5 车牌识别算法 xff0c 支持12种中文车牌类型 基于yolov5的车牌检测 车牌矫正以及 基于CRNN的车牌识别 1 单行蓝牌 2 单行黄牌 3 新能源车牌 4 白色警用车牌 5 教练车牌 6 武警车牌 7 双层黄牌 8 双
  • LINUX nautilus 命令

    最近使用Ubuntu的时候发现了一个很好用的小命令 xff1a nautilus nautilus是GNOME桌面下的一个文件管理工具 通过这个命令我们可以在终端下非常方便的打开指定目录的文件 nautilus 命令后面一个 xff0c 表
  • 无人机学习之路——电机

    一 什么是电机 xff1f 电机是整个无人机的四肢 xff0c 没有电机来驱动的话整个无人机就无法飞起来 因此我们来重点介绍下电机的一些基础知识 本篇内容不会很详细 xff0c 不会全部介绍 xff0c 只会介绍无人机需要学习的知识 二 电
  • c++中“::”和“:”啥意思

    c 43 43 中 和 啥意思 1 1 类作用域操作符 指明了成员函数所属的类 如 xff1a M f s 就表示f xff08 s xff09 是类M的成员函数 2 表示 域操作符 例 xff1a 声明了一个类A xff0c 类A里声明了
  • python中执行shell脚本之subprocess模块

    一 最近subprocess使用背景和介绍 因为最近领导要求 xff0c 在Python端调用大数据的shell脚本 xff0c 所以需要用到Python来执行shell脚本 因此需要查看下subprocess模块文档 根据官网文档描述 x
  • odroid-xu4(ubuntu mate 16.04)源码编译opencv 3.2

    硬件平台 xff1a odroid xu4 软件环境 xff1a ubuntu mate 16 04 1 更新软件列表 xff1a sudo apt get update 2 安装依赖包 xff1a apt get install libq
  • Pytorch Tensor基本数学运算

    1 加法运算 示例代码 xff1a import torch 这两个Tensor加减乘除会对b自动进行Broadcasting a 61 torch rand 3 4 b 61 torch rand 4 c1 61 a 43 b c2 61