PyTorch基本使用-张量的索引操作

server/2024/12/14 0:59:03/

在操作张量时,经常要去获取某些元素进行处理或者修改操作,在这里需要了解torch中的索引操作。

准备数据:

python">data = torch.randint(0,10,[4,5])
print('data--->',data)

输出结果:

data---> tensor([[3, 9, 4, 0, 5],[7, 5, 9, 9, 7],[5, 9, 8, 9, 7],[9, 2, 6, 7, 7]])
  • 简单行、列索引

    python">print('第一行:',data[0])
    print('第一列:',data[:,0])
    

    输出结果:

    第一行: tensor([3, 9, 4, 0, 5])
    第一列: tensor([3, 7, 5, 9])
    
  • 列表索引

    python">print('-----------------返回(0,1)、(1,2) 2个位置的元素------------------')
    print(data[[0,1],[1,2]])
    print('-----------------返回0、1 行的1、2 列共4个元素------------------')
    print(data[[[0],[1]],[1,2]])
    

    输出结果:

    -----------------返回(0,1)、(1,2) 2个位置的元素------------------
    tensor([9, 9])
    -----------------返回0、1 行的1、2 列共4个元素------------------
    tensor([[9, 4],[5, 9]])
    
  • 范围索引

    python">print('-----------------前3行、前2列的数据------------------')
    print(data[:3,:2])
    print('-----------------第2行到最后的前2列数据------------------')
    print(data[2:,:2])
    

    输出结果:

    -----------------前3行、前2列的数据------------------
    tensor([[3, 9],[7, 5],[5, 9]])
    -----------------第2行到最后的前2列数据------------------
    tensor([[5, 9],[9, 2]])
    
  • 布尔索引

    python">print('-----------------第三列大于5的行数据------------------')
    print(data[data[:,2] > 5])
    print('-----------------第二行大于5的行数据------------------')
    print(data[:,data[1] > 5])
    

    输出结果:

    -----------------第三列大于5的行数据------------------
    tensor([[7, 5, 9, 9, 7],[5, 9, 8, 9, 7],[9, 2, 6, 7, 7]])
    -----------------第二行大于5的行数据------------------
    tensor([[3, 4, 0, 5],[7, 9, 9, 7],[5, 8, 9, 7],[9, 6, 7, 7]])
    
  • 多维索引

    python">data = torch.randint(0,10,[3,4,5])
    print(data)
    # 获取0轴上的第一个数据
    print(data[0,:,:])
    # 获取1轴上的第一个数据
    print(data[:,0,:])
    # 获取2轴上的第一个数据
    print(data[:,:,0])
    

    输出结果:

    tensor([[[8, 3, 6, 1, 5],[5, 0, 4, 3, 8],[8, 3, 3, 5, 0],[6, 4, 0, 8, 4]],[[7, 2, 3, 8, 5],[6, 2, 9, 5, 0],[4, 2, 7, 1, 1],[5, 4, 4, 1, 1]],[[2, 4, 7, 2, 5],[6, 1, 4, 5, 6],[9, 2, 3, 1, 0],[2, 1, 2, 7, 9]]])
    tensor([[8, 3, 6, 1, 5],[5, 0, 4, 3, 8],[8, 3, 3, 5, 0],[6, 4, 0, 8, 4]])
    tensor([[8, 3, 6, 1, 5],[7, 2, 3, 8, 5],[2, 4, 7, 2, 5]])
    tensor([[8, 5, 8, 6],[7, 6, 4, 5],[2, 6, 9, 2]])
    

http://www.ppmy.cn/server/149958.html

相关文章

HTTP 状态码大全

常见状态码 200 OK # 客户端请求成功 400 Bad Request # 客户端请求有语法错误 不能被服务器所理解 401 Unauthorized # 请求未经授权 这个状态代码必须和WWW- Authenticate 报头域一起使用 403 Forbidden # 服务器收到请求但是拒绝提供服务 404 Not Found # 请求资源不存…

学会用VSCode debug

本文主要介绍了 VS Code 的调试功能,包括其强大的内置调试器,支持多种语言,如 JavaScript、TypeScript 等。通过简单项目示例展示调试过程,还介绍了运行面板和菜单、启动配置、调试操作、断点、记录点等功能,以及三种调…

Mac电脑钓鱼到拿下核心权限

目录 一. 前言 二. PKG后门制作阶段 2.1 环境准备 2.2 制作过程 2.3 成功上线 三 . 浏览器密码抓取 四. 权限维持 1. 手动权限维持 2. MSF自动化维持 五. 参考文章 一. 前言 攻防对抗强度和难度日益演进,传统的渗透测试思路成本逐渐提高,钓鱼已经成为当下攻击者最常…

C++ 内存管理和模板与STL

此篇目是之后各种C库的基础 目录 内存管理 内存分布 内存管理方式 new和delete operator new 与 operator delete函数 实现原理 定位new表达式(placement-new) 模板基础 泛型编程 模板 函数模板 类模板 STL 组成部分 内存管理 内存分布 int globalVar 1; //全局变量 静…

STM32-C语言基础知识

C语言基础知识 stdint.h简介 给寄存器某个位赋值 给位6赋值为1流程:先清0,再赋值 带参数的宏定义 建议使用do {…}while(0)来构造宏定义 条件编译 条件编译后面必须跟宏语句,如#if _LED_H 指针使用常见的2大问题 1、未初始化 2、越界使…

家校通小程序实战教程06口令验证

目录 1 打开口令的必录项2 创建自定义方法3 自定义方法语法说明4 方法调试5 实现加入班级的逻辑6 验证口令的合法性7 判断口令是否有效8 完整的代码总结 我们目前已经搭建好了后台功能,也生成好了口令。在教师加入班级的时候就需要输入口令,口令验证通过…

部分正则表达式规则

1.[ab]:表示匹配一个字符,或者是a或者是b 2.[a-z]:表示从a到z的26个字母中的任意一个 3.[A-Z]:表示从A到Z的26个字母中的任意一个 4.[0-9]:表示从0到10中的任意的一个 4.1[^ab]:表示匹配一个字符,除a,b之外的 5.{11}:表示前面的字符能出现11次…

node.js 环境配置

node_global下创建node_modules 系统变量 新建NODE_Path -> node_modules的路径 用户变量 编辑Path 编辑…\npm为 node_modules的路径 系统变量 Path 新建 %NODE_PATH% CMD测试 npm install express -g 报错 npm error code ETIMEDOUT源的连接超时,没用了要换源 …