PyTorch张量索引

文章目录

  • 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://xiahunao.cn/news/3247471.html

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

相关文章

未来的社交标杆:如何通过AI让Facebook更加智能化?

在当今信息爆炸的时代,社交媒体平台的智能化已成为提高用户体验和互动质量的关键因素。Facebook,作为全球最大的社交平台之一,通过人工智能(AI)的广泛应用,正不断推进其智能化进程。本文将探讨Facebook如何…

Postman安装使用教程(详解)

目录 一、Postman是什么 二、安装系统要求 三、下载Postman 四、注册和登录Postman 五、创建工作空间 六、创建请求 一、Postman是什么 在安装之前,让我们先来简单了解一下Postman。Postman是一个流行的API开发工具,它提供了友好的用户界面用于发送…

web安全之跨站脚本攻击xss

定义: 后果 比如黑客可以通过恶意代码,拿到用户的cookie就可以去登陆了 分类 存储型 攻击者把恶意脚本存储在目标网站的数据库中(没有过滤直接保存),当用户访问这个页面时,恶意脚本会从数据库中被读取并在用户浏览器中执行。比如在那些允许用户评论的…

llama-index,uncharted and llama2:7b run locally to generate Index

题意:本地运行 llama-index、uncharted 以及 llama2:7b 来生成索引 问题背景: I wanted to use llama-index locally with ollama and llama3:8b to index utf-8 json file. I dont have a gpu. I use uncharted to convert docs into json. Now If it …

Linux openEuler_24.03部署MySQL_8.4.0 LTS安装实测验证安装以及测试连接全过程实操手册

Linux openEuler_24.03部署MySQL_8.4.0 LTS安装实测验证安装以及测试连接全过程实操手册 前言: 什么是 MySQL? MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于Oracle 公司。MySQL 是一种关系型数据库管理系统,关系型数据库将数据保存在不同的表中,…

捷配总结的SMT工厂安全防静电规则

SMT工厂须熟记的安全防静电规则! 安全对于我们非常重要,特别是我们这种SMT加工厂,通常我们所讲的安全是指人身安全。 但这里我们须树立一个较为全面的安全常识就是在强调人身安全的同时亦必须注意设备、产品的安全。 电气: 怎样预…

基于python的百度资讯爬虫的设计与实现

研究背景 随着互联网和信息技术的飞速发展,网络已经成为人们获取信息的主要来源之一。特别是搜索引擎,作为信息检索的核心工具,极大地改变了人们获取信息的方式。其中,百度作为中国最受欢迎的搜索引擎之一,其新闻搜索…

Mojo编程语言:AI开发者的新宠儿

Mojo编程语言是AI开发者的新宠儿。 随着人工智能技术的飞速进步,编程语言的选择也变得越来越关键。近年来,Mojo编程语言凭借其独特的优势迅速崛起,成为AI开发者的新宠儿。那么,是什么让Mojo如此特别?为什么它会在众多…

知识分享:网贷大数据查询会影响个人征信吗?

随着人们对传统征信的认识不断加深和对个人征信的重视,部分网友就有一种疑问,那就是关于网贷大数据查询对征信有没有影响的问题,小易大数据小编就用本文就为大家详细讲解一下,希望对你了解网贷大数据有帮助。 首先网贷大数据与征信…

如何通过DBC文件看懂CAN通信矩阵

实现汽车CAN通信开发,必不可少要用到DBC文件和CAN通信矩阵。 CAN通信矩阵是指用于描述 CAN 网络中各个节点之间通信关系的表格或矩阵。它通常记录了每个节点能够发送和接收的消息标识符(ID)以及与其他节点之间的通信权限。 通信矩阵在 CAN 网…

无需业务改造,一套数据库满足 OLTP 和 OLAP,GaiaDB 发布并行查询能力

在企业中通常存在两类数据处理场景,一类是在线事务处理场景(OLTP),例如交易系统,另一类是在线分析处理场景(OLAP),例如业务报表。 OLTP 数据库擅长处理数据的增、删、改&#xff0c…

Elasticsearch 企业级实战 01:Painless 脚本如何调试?

在企业级应用中,Elasticsearch 常常被用来处理复杂的数据查询和操作。 Painless 是 Elasticsearch 的内置脚本语言,虽然强大,但调试起来并不容易。 本文将详细介绍如何在实战中有效调试 Painless 脚本,以提高开发和运维效率。 本文…

百日筑基第二十三天-23种设计模式-创建型总汇

百日筑基第二十三天-23种设计模式-创建型总汇 前言 设计模式可以说是对于七大设计原则的实现。 总体来说设计模式分为三大类: 创建型模式,共五种:单例模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式。结构型模式,共…

java基础之数组,int[]和ArrayList

开始学java的时候,对于 int[] 和ArrayList总是懵懵懂懂的,不知道啥时候用哪个。现在终于了解了,总结一下跟大家分享一下 int[]数组 创建// 方式一:创建一个固定的数组 int arr1 {1,2,3,4,5}; // 方式二:创建一个长度为10的数组 double[] ar…

28_EfficientNetV2网络详解

V1:https://blog.csdn.net/qq_51605551/article/details/140487051?spm1001.2014.3001.5502 1.1 简介 EfficientNetV2是Google研究人员Mingxing Tan和Quoc V. Le等人在2021年提出的一种深度学习模型,它是EfficientNet系列的最新迭代,旨在提…

HLS加密技术:保障流媒体内容安全的利器

随着网络视频内容的爆炸性增长,如何有效保护视频内容的版权和安全成为了一个亟待解决的问题。HLS(HTTP Live Streaming)加密技术作为一种先进的流媒体加密手段,凭借其高效性和安全性,在直播、点播等场景中得到了广泛应…

十大排序 之 选择排序

!!!排序仅针对于数组哦本次排序是按照升序来的哦 介绍 快速排序英文名为SelectSort从数组中找到最小的放到前边 基本思路 1、默认待排序数组中第一个作为最小值2、找待排序数组(注意不是整个数组哦)中真正的最小值3…

【机器学习实战】Datawhale夏令营2:深度学习回顾

#DataWhale夏令营 #ai夏令营 文章目录 1. 深度学习的定义1.1 深度学习&图神经网络1.2 机器学习和深度学习的关系 2. 深度学习的训练流程2.1 数学基础2.1.1 梯度下降法基本原理数学表达步骤学习率 α梯度下降的变体 2.1.2 神经网络与矩阵网络结构表示前向传播激活函数…

《昇思25天学习打卡营第22天|生成式-Diffusion扩散模型》

Diffusion扩散模型 本文基于Hugging Face:The Annotated Diffusion Model一文翻译迁移而来,同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件,执行Python文件时,请…

数据结构day2

一、思维导图 内存分配 二、课后习题 分文件编译 //sys.h #ifndef TEST_H #define TEST_H #define MAX_SIZE 100//定义学生类型 typedef struct Stu {char name[20]; //姓名int age; //年龄double score; //分数 }stu;//定义班级类型 typedef struct Class {struct …