当前位置: 首页 > news >正文

计算机视觉(CV)——pytorch张量基本使用

1. 张量的创建方式

import torch
# 1.通过列表创建张量
t = torch.tensor([1, 2])# 2.通过元组创建张量
torch.tensor((1, 2))# 3.通过array创建张量
import numpy as np
x = np.array((1, 2))
torch.tensor(x)

2. 张量的类型

t.dtype 
# 张量默认创建长整形int64
torch.tensor(np.array([1.1, 1.2])).dtype
# 输出为float64
torch.tensor([1.1, 1.2]).dtype
# 输出为float32
## 创建浮点型数组时,张量默认创建32位,而array默认为64位置

在这里插入图片描述

2.1 创建指定类型的张量
torch.tensor([1, 2], dtype=torch.int16)
2.2 创建复数
# 1是实部,2j是虚部
x = torch.tensor(1 + 2j)

3. 张量的维度及形变

3.1 查看张量维度
# 创建1维张量
t = torch.tensor([1, 2])# 查看张量维度
t.ndim
t.shape
t.size()
3.2 0维张量
# 虽然只包含一个元素,但又不是单独的一个数
# t1是一个0维张量,而t2是一个1维张量
t1 = torch.tensor(1)
t2 = torch.tensor([1])
3.3 张量的解读方法
import numpy as np
a1 = np.array([[1, 2, 2], [1, 3, 3]])
a2 = np.array([[1, 2, 3], [4, 5, 6]])# 创建一个高维数组
t3 = torch.tensor([a1, a2])
"""
tensor([[[1, 2, 2],[1, 3, 3]],[[1, 2, 3],[4, 5, 6]]])
"""# 输出其形状
t3.shape
"""torch.Size([2, 2, 3])
"""
# 第一个2可以理解为张量t3包含两个子元素,(2, 3)可以理解为这两个子元素是二维的,且形状为2x3
3.4 拉平张量
# 将多维的张量准换为1xn的张量
t4 = t3.flatten()
6. 使用reshape进行任意变化
使用reshape时,若调用为 t.reshape(x, y, z,...),则 t.shape 得到的值即为(x, y, z,...)

4. 张量的索引、切片

4.1 张量的符号索引
import torch
import numpy as np
# 1.一维张量索引,基本格式遵循[start : end : step]
t1 = torch.arange(1, 11)
# tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 这样获取的是一个0维张量,不是单独的数,要转换为数字需使用item()方法
t1[0]
# tensor(1)
t1[1: 8] #左闭右开
# tensor([2, 3, 4, 5, 6, 7, 8])
t1[1: : 2]
# tensor([2, 4, 6, 8, 10])
t1[: 8 : 2]
# tensor([1, 3, 5, 7])
4.2 张量的函数索引
# 使用index_select(),通过指定index来对张量进行索引
indices = torch.tensor([1, 2])
x = torch.index_select(t1, 0, indices)
# 第二个参数代表索引的维度,由于t1只有一个维度,故而取值为0,表示在第一个维度上进行索引

在这里插入图片描述

4.3 tensor.view()

此方法会返回一个类似视图的结果,该结果和原张量对象共享一块数据存储空间,并且通过.view()方法,还可以改变对象结构,生成一个不同结构,但共享一个存储空间的张量。当然,共享一个存储空间,也就代表二者是”浅拷贝”的关系,修改其中一个,另一个也会同步进行更改。
在这里插入图片描述

4.4 chunk分块

在这里插入图片描述
当原张量不能均分时,chunk不会报错,会返回其他均分结果

4.5 split拆分函数

在这里插入图片描述
split所得对象也是一个视图

5. 张量的合并操作

张量的合并操作与列表的追加元素类似,可以拼接、堆叠

5.1 拼接函数cat

1.1 先初始化3个张量
在这里插入图片描述
1.2 分别按照行列进行拼接
在这里插入图片描述
1.3 拼接维度不一致将会出错
在这里插入图片描述

5.2 堆叠函数stack

在这里插入图片描述

注:堆叠要求张量的形状完全一致,要求比cat更高

5. 张量广播

广播特性允许允许不同形状的张量之间进行计算。

  1. 相同形状的张量计算本质也用到了广播特性。
  2. 不同形状的张量计算。
  • 标量和任意形状的张量都可以运算。
  • 不同形状的张量。
    • 若二者在两个分量均不相同,但都有分量为1的情况,则可以广播;
    • 若二者在两个分量中仅有一个不同,且不同的分量中有一个为1,则可以广播。
http://www.dtcms.com/a/324269.html

相关文章:

  • 深入解析Java中的String、StringBuilder与StringBuffer:特性、区别与最佳实践
  • Gin 框架中的模板引擎使用指南
  • LeetCode 每日一题 2025/8/4-2025/8/10
  • mpv core_thread pipeline
  • c语言常见错误
  • MySQL 处理重复数据详细说明
  • ADK(Agent Development Kit)【2】调用流程详解
  • 智慧交通-道路积雪识别分割数据集labelme格式1985张2类别
  • python Flask简单图书管理 API
  • 【Linux知识】Linux grep 命令全面使用指南
  • 祝融号无线电工作频段
  • C++入门自学Day8-- 初识Vector
  • leetcode2379:得到K个黑块的最少涂色次数(定长滑动窗口)
  • 2.变量和常量
  • Go 工具链环境变量实战:从“command not found”到工具全局可用的全流程复盘
  • 【数据结构入门】栈和队列的OJ题
  • 二维前缀和问题
  • MySQL面试题及详细答案 155道(041-060)
  • 构建第三方软件仓库
  • 数据类型取值范围
  • String AOP、事务、缓存
  • 【18】OpenCV C++实战篇——【项目实战】OpenCV C++ 精准定位“十字刻度尺”中心坐标,过滤图片中的干扰,精准获取十字交点坐标
  • 力扣559:N叉树的最大深度
  • XGBoost算法在机器学习中的实现
  • C语言:指针(2)
  • Gin vs Beego vs Echo:三大主流 Go Web 框架深度对比
  • 前端开发中的常见问题与实战解决方案​
  • JS数组排序算法
  • scanpy单细胞转录组python教程(三):单样本数据分析之数据标准化、特征选择、细胞周期计算、回归等
  • 2025.8.10总结