PyTorch张量索引

news2024/9/22 13:39:49

文章目录

  • 1、简介
    • 1.1、基本概念
    • 1.2、索引类型
    • 1.3、数据准备
    • 1.4、技术摘要⭐
  • 2、简单行、列索引
  • 3、列表索引
  • 4、范围索引
  • 5、布尔索引
  • 6、多维索引

🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎人工智能和前端开发。
🦅个人主页:@逐梦苍穹
📕所属专栏:人工智能
🌻gitee地址:xzl的人工智能代码仓库
✈ 您的一键三连,是我创作的最大动力🌹

1、简介

我们在操作张量时,经常需要去进行获取或者修改操作,掌握张量的花式索引操作是必须的一项能力。

张量索引是指从多维数组(即张量)中访问特定元素、子张量或切片的过程。理解张量索引是操作和处理张量数据的基础。下面是一些关于张量索引的理论知识:

1.1、基本概念

  • 张量:张量是多维数组的泛化,可以是标量、向量、矩阵或更高维度的数组。例如,标量是0维张量,向量是1维张量,矩阵是2维张量,三维及更高维度的数组也是张量。
  • 维度(Dimension):张量的维度数,表示数组在每个方向上的大小。
  • 形状(Shape):描述张量在每个维度上的大小。例如,形状为(2, 3, 4)的张量表示它有3个维度,每个维度分别有2、3、4个元素。

1.2、索引类型

张量索引主要有以下几种类型:

  1. 整型索引(Integer Indexing):
    • 使用一个或多个整型值来访问张量中的特定元素或子张量。
    • 例如,对于一个形状为(3, 4)的二维张量AA[1, 2]访问的是第二行第三列的元素(索引从0开始)。
  2. 切片索引(Slicing):
    • 使用冒号:表示范围,来访问张量的子集。
    • 例如,对于一个形状为(3, 4)的二维张量AA[1:3, :]访问的是第二行和第三行的所有列。
  3. 高级索引(Advanced Indexing):
    • 使用数组或张量作为索引,以访问特定模式的元素。
    • 例如,对于一个形状为(3, 4)的二维张量AA[[0, 2], [1, 3]]访问的是(0,1)和(2,3)位置的元素。
  4. 布尔索引(Boolean Indexing):
    • 使用布尔数组或张量来筛选符合条件的元素。
    • 例如,对于一个形状为(3, 4)的二维张量AA[A > 5]访问的是所有大于5的元素。

1.3、数据准备

下面在进行代码演示之前,先准备一份数据:

import torch
data = torch.randint(0, 10, [4, 5])
print(data)
print('-' * 50)

image.png

1.4、技术摘要⭐

索引类型描述代码方法
整型索引使用一个或多个整型值来访问张量中的特定元素或子张量tensor[index] 访问张量 tensor 的特定元素或子张量,
例如 tensor[1, 2] 访问二维张量的第二行第三列元素
切片索引使用冒号 : 表示范围,访问张量的子集tensor[start:stop:step] 访问 tensor 的子集,
例如 tensor[1:3, :] 访问二维张量的第二行和第三行的所有列
高级索引使用数组或张量作为索引,以访问特定模式的元素tensor[indices] 访问 tensor 的特定模式元素,
例如 tensor[[1, 2], [2, 3]] 访问特定位置的元素
布尔索引使用布尔数组作为掩码,访问满足条件的元素tensor[mask] 访问 tensor 中满足 mask 条件的元素,
例如 tensor[tensor > 0] 访问所有大于0的元素

2、简单行、列索引

data[0] 获取并打印张量的第一行。
data[:, 0] 获取并打印张量的第一列。

def test01():
    print(data[0])
    print(data[:, 0])
    print('-' * 50)

image.png

3、列表索引

在PyTorch和其他基于NumPy的库中,列表索引是一种高级索引方式,允许使用列表或数组中的索引来选择张量中的特定元素。
这种索引方式可以比传统的切片更灵活、更强大。
基本概念:

  • 列表索引:使用一个或多个列表来索引张量,提取出特定的元素。
  • 广播机制:当列表索引的形状不匹配时,会自动 扩展(广播) 这些索引,使得它们可以一起使用。
def test02():
    # 返回 (0, 1)、(1, 2) 两个位置的元素
    print(data[[0, 1], [1, 2]])
    print('-' * 50)

    # 返回 0、1 行的 1、2 列共4个元素
    print(data[[[0], [1]], [1, 2]])
    print(data[[[2], [3]], [1, 2]])
    print(data[[[0, 1], [1, 2]], [1, 2]])
    print(data[[[0, 1], [2, 3]], [1, 2]])

输出:

E:\anaconda3\python.exe D:\Python\AI\PyTorch\12-行-列索引.py 
tensor([[2, 4, 2, 0, 4],
        [0, 8, 4, 7, 6],
        [8, 7, 3, 7, 3],
        [0, 2, 6, 2, 9]])
tensor(3)
--------------------------------------------------
tensor([4, 4])
--------------------------------------------------
tensor([[4, 2],
        [8, 4]])
tensor([[7, 3],
        [2, 6]])
tensor([[4, 4],
        [8, 3]])
tensor([[4, 4],
        [7, 6]])

Process finished with exit code 0

下面我会详细介绍下面这四个数据的计算过程:
image.png
如下所示:
1721228384148.png
1721228415101.png
1721228453358.png

4、范围索引

# 3. 范围索引
def test03():
    # 前3行的前2列数据
    print(data[:3, :2])
    # 第2行到最后的前2列数据
    print(data[2:, :2])
if __name__ == '__main__':
    test03()

image.png

5、布尔索引

# 布尔索引
def test04():
    # 第三列大于5的行数据
    print(data[data[:, 2] > 5])
    # 第二行大于5的列数据
    print(data[:, data[1] > 5])
if __name__ == '__main__':
    test04()

image.png

6、多维索引

# 多维索引
def test05():

    data = torch.randint(0, 10, [3, 4, 5])
    print(data)
    print('-' * 50)

    print(data[0, :, :])
    print(data[:, 0, :])
    print(data[:, :, 0])

if __name__ == '__main__':
    test05()

输出:

E:\anaconda3\python.exe D:\Python\AI\PyTorch\12-行-列索引.py 
tensor([[[9, 2, 4, 0, 9],
         [3, 6, 7, 1, 9],
         [9, 3, 8, 3, 3],
         [5, 6, 8, 2, 0]],

        [[4, 1, 7, 8, 1],
         [2, 1, 3, 3, 5],
         [7, 2, 6, 0, 1],
         [7, 0, 3, 2, 4]],

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

Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1938720.html

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

相关文章

Golang | Leetcode Golang题解之第241题为运算表达式设计优先级

题目&#xff1a; 题解&#xff1a; const addition, subtraction, multiplication -1, -2, -3func diffWaysToCompute(expression string) []int {ops : []int{}for i, n : 0, len(expression); i < n; {if unicode.IsDigit(rune(expression[i])) {x : 0for ; i < n &…

大规模优化问题,Scipy?Ceres?PyTorch!

背景&#xff1a; 优化问题一般通过scipy.optimize或者Ceres Solver优化器求解。但在参数量较大的优化问题上&#xff0c;scipy提供的BFGS、L-BFGS-B、CG、SLSQP等梯度优化算法其复杂度和存储需求指数级上升&#xff0c;无法满足计算效率&#xff1b;而Ceres需要额外的语言来支…

科普文:百度交易中台之系统对账篇

百度交易中台作为集团移动生态战略的基础设施&#xff0c;面向收银交易与清分结算场景&#xff0c;赋能业务、提供高效交易生态搭建。目前支持百度体系内多个产品线&#xff0c;主要包括&#xff1a;度小店、小程序、地图打车、文心一言等。本文主要介绍了百度交易中台的交易链…

如何让主机显示Docker容器的程序界面,同时支持声音播放

系统中如果安装各种应用软件&#xff0c;很容易会因为版本冲刺引发异常。一个好的办法就是用容器来隔离系统环境&#xff0c;确保主机环境不变。对于一些有界面的程序&#xff0c;可以在容器内运行&#xff0c;让其界面显示在主机上。下面以安装和使用视频剪辑软件shotcut为例&…

【一刷《剑指Offer》】面试题 42:翻转单词顺序 VS 左旋转字符串

力扣对应题目链接&#xff1a;151. 反转字符串中的单词 - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;翻转单词序列_牛客题霸_牛客网 (nowcoder.com) 核心考点 &#xff1a;子串划分&#xff0c;子串逆置。 一、题目一 1、《剑指Offer》对应内容 2、…

Delphi5实现加密程序

效果图 平面效果图 实现“确认按钮”和“加密” //点击确认输入按钮 procedure TForm1.btn1Click(Sender: TObject); //加密部分 varpasswd_2,passwd_3:string;beginpasswd_2:edt1.Text;Delete(passwd_2,3,2);passwd_3:mima;Delete(passwd_3,3,2);if(passwd_2passwd_3) thenM…

MAE(论文阅读):Masked Autoencoders are scalable vision learners

Masked Autoencoders Are Scalable Vision Learners 研究问题&#xff1a; 本文主要介绍了掩码自编码器( MAE, Masked autoencoders)是视觉领域中可扩展的自监督学习算法。MAE具体操作为随机屏蔽输入image中的patchs&#xff0c;再重建丢失的像素。其基于两个核心操作。第…

HTML5大作业三农有机,农产品,农庄,农旅网站源码

文章目录 1.设计来源1.1 轮播图页面头部效果1.2 栏目列表页面效果1.3 页面底部导航效果 2.效果和源码2.1 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_4…

浅谈Canal原理

canal [kə’nl]&#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据 订阅 和 消费。应该是阿里云DTS&#xff08;Data Transfer Service&#xff09;的开源版本。 Canal与DTS提供的功能基本相似&#xff1a; 基于…

python Requests库7种主要方法及13个控制参数(实例实验)

文章目录 一、Requests库的7种主要方法二、kwargs:控制访问的13个参数 一、Requests库的7种主要方法 序号方法说明1requests.request()&#xff1a;提交一个request请求&#xff0c;作为其他请求的基础2requests.get()&#xff1a;获取HTML网页代码的方法3requests.head()&…

内网隧道——隧道技术基础

文章目录 一、正向连接与反向连接1.1 正向连接1.2 反向连接 二、端口转发三、端口映射四、端口复用五、代理和隧道的区别六、常见隧道穿透分类 环境&#xff1a; kali&#xff1a;192.168.92.6&#xff0c;MSF v6.3.25 win7&#xff1a;192.168.92.7 一、正向连接与反向连接 1…

python实现误差扩散、Floyd-Steinberg 抖动、有序抖动、Riemersma 抖动算法

误差扩散、Floyd-Steinberg 抖动、有序抖动、Riemersma 抖动算法 1.误差扩散算法详解算法步骤Floyd-Steinberg 算法公式Python 实现详细解释优缺点 2.有序抖动算法详解算法步骤Bayer矩阵公式Python 实现详细解释优缺点 3.Riemersma 抖动算法详解算法步骤公式Python 实现详细解释…

网络编程中的TCP和UDP

什么是TCP协议 TCP( Transmission control protocol )即传输控制协议&#xff0c;是一种面向连接、可靠的数据传输协议&#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接 &#xff1a;数据传输之前客户端和服务器端必须建立连…

人工智能与语音识别:技术进步与应用前景

引言 人工智能&#xff08;AI&#xff09;作为当今科技进步的核心驱动力&#xff0c;正在各个领域展现其变革力量。其中&#xff0c;语音识别技术作为人工智能的重要应用之一&#xff0c;已经深入到我们的日常生活和工作中。从智能助手如Siri、Google Assistant&#xff0c;到智…

最新版kubeadm搭建k8s(已成功搭建)

kubeadm搭建k8s&#xff08;已成功搭建&#xff09; 环境配置 主节点 k8s-master&#xff1a;4核8G、40GB硬盘、CentOS7.9&#xff08;内网IP&#xff1a;10.16.64.67&#xff09; 从节点 k8s-node1&#xff1a; 4核8G、40GB硬盘、CentOS7.9&#xff08;内网IP&#xff1a;10…

n5.Nginx 常见模块

Nginx 常见模块 4.1 Nginx 四层访问控制4.2 Nginx 账户认证功能4.3 自定义错误页面4.4 自定义错误日志4.5 检测文件是否存在4.6 长连接配置4.7 作为下载服务器配置4.8 作为上传服务器4.9 限流限速4.10 Nginx 状态页 4.1 Nginx 四层访问控制 访问控制基于模块ngx_http_access_m…

【一刷《剑指Offer》】面试题 37:两个链表的第一个公共结点

力扣对应题目链接&#xff1a;160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com) 核心考点 &#xff1a;单链表理解&#xff0c;临界条件判定。 一、《剑指Offer》对应内容 二、分…

Python酷库之旅-第三方库Pandas(036)

目录 一、用法精讲 111、pandas.Series.item方法 111-1、语法 111-2、参数 111-3、功能 111-4、返回值 111-5、说明 111-6、用法 111-6-1、数据准备 111-6-2、代码示例 111-6-3、结果输出 112、pandas.Series.xs方法 112-1、语法 112-2、参数 112-3、功能 112-…

快速了解死锁及如何解决死锁问题

目录 什么是死锁&#xff1f; 死锁代码示例 产生死锁的条件&#xff1a; 死锁的危害&#xff1a; 如何解决死锁问题&#xff1f; 1、预防死锁&#xff08;破坏上述4个产生死锁的条件&#xff09;&#xff1a; 2、银行家算法 3、死锁的检测、解除 4、采用超时机制 什么…

C语言 ——— 写一个函数,调整 整型数组 中 奇数偶数的顺序

目录 题目要求 代码实现 题目要求 创建一个整型数组 自定义函数实现&#xff1a;调整该数组中数字的顺序&#xff0c;使得数组中所有的奇数位于数组的前半部分&#xff0c;数组中所有的偶数位于数组的后半部分 举例&#xff1a; 输入的整型数组为&#xff1a;[234,24,45,…