张量的索引切片

张量的索引切片

张量的索引切片方式和numpy几乎是一样的。切片时支持缺省参数和省略号。可以通过索引和切片对部分元素进行修改。类似于数组的切片,但是又稍微有些不同:
例如:a=torch.rand(4,3,28,28):dim=4的张量数据a
(1)a[:2]:取第一个维度的前2个维度数据(不包括2);
(2)a[:2,:1,:,:]:取第一个维度的前两个数据,取第二个维度的第一个数据,后两个维度全都取到;
(3)a[:2,1:,:,:]:取第一个维度的前两个数据,取第二个维度的索引1到最后索引的数据(包含1),后两个维度全都取到;
(4)a[:2,-3:]:取第一个维度的前两个数据,负号表示第二个维度上从倒数第三个数据取到最后倒数第一个数据-1(包含-3);
(5)a[:,:,0:28:2,0:28:2]:前两个维度全都取到,两个冒号表示隔行取数据,一定的间隔,最后两个维度取索引0到27之间的数据,且间隔为2;
其中间隔为2;
(6)a[:,:,::2,::3]:前两个维度全都取到,两个冒号直接写表示从所有的数据中隔行取数据,第三个维度以间隔2取所有数据,第四个维度以间隔3取所有数据
此外,对于不规则的切片提取,可以使用torch.index_select, torch.masked_select, torch.take
torch.index_select功能为从张量的某个维度的指定位置选取数据
torch.masked_select会根据掩码张量mask中的二元值,取输入张量中的指定项( mask为一个 ByteTensor),将取值返回到一个新的1D张量,张量 mask须跟input张量有相同数量的元素数目,但形状或维度不需要相同
torch.take先将张量数据打平为一个dim=1的张量数据(依次排序下来成为一个数据列),然后按照索引进行取数据

### 张量索引的概念与用法 张量是一种多维数组结构,在深度学习框架如 PyTorch 和 TensorFlow 中被广泛使用。以下是关于张量索引的具体说明: #### 1. **NumPy 的索引** 在 NumPy 中,可以像处理 Python 列表一样对数组进行索引切片操作。例如: ```python import numpy as np numpy_array = np.array([[1, 2, 3], [4, 5, 6]]) print(numpy_array[0, 1]) # 输出:2 ``` 这里 `numpy_array[0, 1]` 表示访问第 0 行第 1 列的元素[^1]。 #### 2. **TensorFlow 的张量索引** TensorFlow 提供了类似的索引功能,可以直接通过方括号 `[ ]` 访问张量中的特定位置。例如: ```python import tensorflow as tf tensor = tf.constant([[1, 2, 3], [4, 5, 6]]) print(tensor[0, 1].numpy()) # 输出:2 ``` 上述代码展示了如何从二维张量中提取单个元素。 #### 3. **PyTorch 的张量索引** PyTorch 支持更灵活的高级索引方式,允许使用布尔掩码或整数列表来选择子集。例如: ```python import torch a = torch.tensor([[1, 2, 3], [4, 5, 6]]) # 基本索引 print(a[0, 1]) # 输出:2 # 高级索引 (按条件筛选) mask = a > 3 print(a[mask]) # 输出:tensor([4, 5, 6]) # 整数列表索引 rows = torch.tensor([0, 1]) cols = torch.tensor([1, 2]) print(a[rows, cols]) # 输出:tensor([2, 6]) ``` 这些例子演示了基本索引以及基于条件和整数列表的选择方法[^2]。 #### 4. **张量切片** 除了简单的索引外,还可以通过对多个维度应用范围来进行切片操作。例如: ```python b = torch.arange(16).reshape((4, 4)) print(b[:, :2]) # 所有行的第一列到第二列 print(b[:2, :]) # 前两行的所有列 ``` 以上代码片段分别实现了全选部分列和部分行的操作[^3]。 #### 总结 无论是 NumPy 还是深度学习库中的张量对象,其核心理念都是围绕着高效的数据存取机制展开设计。掌握好基础语法有助于更好地构建复杂的模型架构或者执行数据预处理任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值