三、Pytorch中tensor的内部结构

2023-11-20

tensor的数据结构。tensor分为头信息区(Tensor)和存储区(Storage),信息区主要保存着tensor的形状(size)、步长(stride)、数据类型(type)等信息,而真正的数据则保存成连续数组。由于数据动辄成千上万,因此信息区元素占用内存较少,主要内存占用则取决于tensor中元素的数目,也即存储区的大小。

在这里插入图片描述

from __future__ import print_function
import torch  as t
a = t.arange(0, 6)
a.storage()
'''
输出的结果
 0
 1
 2
 3
 4
 5
'''

b = a.view(2, 3)
b,b.storage()
'''
输出的结果
tensor([[0, 1, 2],
         [3, 4, 5]]),
  0
  1
  2
  3
  4
  5
'''
# 一个对象的id值可以看作它在内存中的地址
# storage的内存地址一样,即是同一个storage
id(b.storage()) == id(a.storage())   
'''
输出的结果
True
'''
# a改变,b也随之改变,因为他们共享storage
a[1] = 100
b
'''
输出的结果
tensor([[  0, 100,   2],
        [  3,   4,   5]])
'''
c = a[2:] 
c,c.storage()
'''
输出的结果
tensor([2, 3, 4, 5]),
  0
  100
  2
  3
  4
  5
'''
c.data_ptr(), a.data_ptr() # data_ptr返回tensor首元素的内存地址
# 可以看出相差8,这是因为2*4=8--相差两个元素,每个元素占4个字节(float)
'''
输出的结果
(61277776, 61277760)
'''
c[0] = -100 # c[0]的内存地址对应a[2]的内存地址
a
'''
输出的结果
tensor([6666,  100, -100,    3,    4,    5])
'''
d = t.LongTensor(c.storage())
d
d[0] = 6666
b
'''
输出的结果
tensor([6666,  100, -100,    3,    4,    5])
'''

# 下面4个tensor共享storage
id(a.storage()) == id(b.storage()) == id(c.storage()) == id(d.storage())

'''
输出的结果
True
'''

a.storage_offset(), c.storage_offset(), d.storage_offset()

'''
输出的结果
(0, 2, 0
'''
e = b[::2, ::2] # 隔2行/列取一个元素
id(e.storage()) == id(a.storage())

'''
输出的结果
True
'''

b.stride(), e.stride()


'''
输出的结果
((3, 1), (6, 2))
'''

e.is_contiguous()
'''
输出的结果
False
'''

普通索引可以通过只修改tensor的offset,stride和size,而不修改storage来实现

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

三、Pytorch中tensor的内部结构 的相关文章

随机推荐

  • 数据库——数据库备份与恢复

    目录 原因 数据库的备份与恢复 1 使用MySQLdump命令备份 2 恢复数据库 表的导入和导出 1 表的导出 2 表的导入 原因 尽管采取了一些管理措施来保证数据库的安全 但是不确定的意外情况总是有可能造成数据的损失 例 如意外的停电
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • [python]bokeh学习总结——QuickStart

    bokeh是python中一款基于网页的画图工具库 画出的图像以html格式保存 一个简单的例子 from bokeh plotting import figure output file show output file patch ht
  • 电子信息工程电子信息毕设分享100例(一)

    单片机毕业设计项目分享系列 这里是DD学长 单片机毕业设计及享100例系列的第一篇 目的是分享高质量的毕设作品给大家 包含全面内容 源码 原理图 PCB 实物演示 论文 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的单片机项目缺少
  • STM32之音频数据的Flash读取与DAC播放

    文章目录 一 STM32103之内部Flash原理 1 Flash介绍 2 Flash的组成 3 STM32内部框架图 二 SD卡的读写 1 实验过程 2 查看hello txt 3 从SD卡里读出数据 三 Flash地址空间的数据读取 1
  • 说说ERP软件的系统设计--开源软件诞生8

    赤龙ERP系统设计篇 第8篇 用日志记录 开源软件 的诞生 赤龙 ERP 开源地址 点亮星标 感谢支持 与开发者交流 kzca2000 码云 https gitee com redragon redragon erp GitHub http
  • 4、pytest -- fixtures:明确的、模块化的和可扩展的

    pytest fixtures的目的是提供一个固定的基线 使测试可以在此基础上可靠地 重复地执行 对比xUnit经典的setup teardown形式 它在以下方面有了明显的改进 fixture拥有一个明确的名称 通过声明使其能够在函数 类
  • IntelliJ IDEA启动项目端口号被占用怎么解决!

    前言 在使用IDEA开发的时候 经常能碰到端口号被占用的报错 我就经常遇到因为我不知道为啥我IDEA他会在我没用的情况下会闪掉 然后等我发现再打开 运行项目的时候就经常报这个错 不过还有的同学是因为启动多个项目 导致端口号用的一样的所有才出
  • 计算机视觉中的深度学习6: 反向传播

    Slides 百度云 提取码 gs3n 神经网络的梯度下降 我们之前在学习线性分类器的时候 使用Loss函数以及梯度下降法来更新权重 那么对于神经网络 我们该如何计算每层神经元的权重呢 对每层W直接求导 愚蠢的方法 如上公式所示 Loss函
  • IDEA-设置VM启动参数

    点击配置 OK 使用方式 System out println System getProperty parm
  • Mysql5.7安装3306端口报错问题解决方法

    自己尝试重装Mysql 但是过程中遇到端口报错 Mysql5 7下载及安装大家可以去参考其他博客 有很详细的过程 我在安装过程中遇到了3306报错 就是在端口号的旁边会有一个感叹号 由于我是重装 我大概猜到原因是之前的Mysql没有卸载干净
  • MySQL安装之yum安装

    在CentOS7中默认安装有MariaDB 这个是MySQL的分支 但为了需要 还是要在系统中安装MySQL 而且安装完成之后可以直接覆盖掉MariaDB 1 下载并安装MySQL官方的 Yum Repository 1 root Bria
  • Linux基础之SQLite数据库

    嵌入式数据库篇 一 SQLite数据库 二 SQLite数据库安装 三 SQLite的命令用法 四 打开 创建数据库的C接口 五 C代码执行sql语句 六 C代码建表和插入数据 七 总结 一 SQLite数据库 1 简介 轻量化 易用的嵌入
  • 使用SpringSecurity

    前几天写了一个SpringBoot对拦截器的使用 在实际项目中 对一些情况需要做一些安全验证 比如在没有登录的情况下访问特定的页面应该解释的拦截处理 这一篇介绍使用SpringSecurity来做简单的安全控制 由于SpringSecuri
  • Servlet实现简单的前后端交互

    Servlet实现简单的前后端交互 首先前后端交互是啥呢 在我的理解中大概是这样的 简单的讲就是数据的交换 接下来我们来看看应该要怎么实现这个简单的交互 1 首先我们前端先不写静态页面 直接在url上将请求的参数放上去 2 后端要做的首先就
  • Mybatis+Servlet+Mysql 整合的一个小项目:对初学者非常友好,有助于初学者很快的上手Java Web

    文章目录 前言 为何要写 目录结构 1 依赖配置 1 1 创建一个web项目 1 2 依赖需求分析 1 3 pom xml 2 配置Mybatis 2 1 mybatis config xml 2 2 UserMapper xml 2 3
  • layui改变字体颜色或者背景颜色

    改变文字颜色 done function res curr count if res data length gt 0 each res data function ii dd if NOTNULL dd islatetime if par
  • 数据库开发题目-什么是视图?以及视图的使用场景有哪些?

    1 视图是一种虚表 2 视图建立在已有表的基础上 视图赖以建立的这些表称为基表 3 向视图提供数据内容的语句为 SELECT 语句 可以将视图理解为 存储起来的 SELECT 语句 4 视图向用户提供基表数据的另一种表现形式 5 视图没有存
  • 数据结构-期末复习重要知识点总结

    目录 第一章 绪论 第二章 线性表 3 顺序表表示 4 顺序表基本运算 5 链表 6 链表的基本运算 7 循环链表 8 双链表 9 静态链表 10 一元多项式表示及相加 第三章 限定性线性表 栈与队列 1 顺序栈 2 链栈 3 链队列 4
  • 三、Pytorch中tensor的内部结构

    tensor的数据结构 tensor分为头信息区 Tensor 和存储区 Storage 信息区主要保存着tensor的形状 size 步长 stride 数据类型 type 等信息 而真正的数据则保存成连续数组 由于数据动辄成千上万 因此