通过索引与切片操作可以提取张量的部分数据,使用频率非常高


文章目录

  • 一、索引
  • 二、切片


一、索引

TensorFlow 中,支持基本的[𝑖][𝑗] …标准索引方式,也支持通过逗号分隔索引号的索
引方式。
考虑输入X 为4 张32x32 大小的彩色图片(为了方便演示,大部分张量都使用随
即分布模拟产生,后文同),shape 为[4,32,32,3],首先创建张量:

x = tf.random.normal([4,32,32,3])
#取第 1 张图片的数据:
x[0]
# 取第1张图片的第2行
x[0][1]
# 取第1张图片,第2行,第3列的像素
x[0][1][2]
# 取第 3 张图片,第2 行,第1 列的像素,B 通道(第2 个通道)颜色强度值
x[2][1][0][1]

当张量的维度数较高时,使用[𝑖][𝑗]. . . [𝑘]的方式书写不方便,可以采用[𝑖, 𝑗, … , 𝑘]的方
式索引,它们是等价的。

取第 2 张图片,第10 行,第3 列:

x[1,9,2]

二、切片

通过𝑠𝑡𝑎𝑟𝑡: 𝑒𝑛𝑑: 𝑠𝑡𝑒𝑝切片方式可以方便地提取一段数据,其中start 为开始读取位置的
索引,end 为结束读取位置的索引(不包含end 位),step 为读取步长。

start: end: step切片方式有很多简写方式,其中start、end、step 3 个参数可以根据需要

选择性地省略,全部省略时即::,表示从最开始读取到最末尾,步长为1,即不跳过任何元

素。

如x[0,::]表示读取第1 张图片的所有行,其中::表示在行维度上读取所有行,它等于

x[0]的写法

tensor索引tensor tensorflow张量索引_tensor索引tensor


特别地,step 可以为负数,考虑最特殊的一种例子,step = −1时,start: end: −1表示

从start 开始,逆序读取至end 结束(不包含end),索引号𝑒𝑛𝑑 ≤ 𝑠𝑡𝑎𝑟𝑡为了避免出现像𝑥[: , : , : ,1]这样出现过多冒号的情况,可以使用⋯符号表示取多个维度

上所有的数据,其中维度的数量需根据规则自动推断:当切片方式出现⋯符号时,⋯符号

左边的维度将自动对齐到最左边,⋯符号右边的维度将自动对齐到最右边,此时系统再自

动推断⋯符号代表的维度数量,

tensor索引tensor tensorflow张量索引_人工智能_02