各位同学好,今天我和大家分享一下TensorFlow2.0中索引与切片。内容有:
(1) 给定每一维度的索引来获取数据;(2) 切片索引;(3) 省略号应用;(4) tf.gather() 方法;(5) tf.gather_nd() 方法;(6) 布尔索引选数据
那我们开始吧。
1. 给定每一维度的索引获取数据
1.1 变量[ ][ ] 方法
首先定义一个全为1的四维tensor,如:tf.ones([2,3,3,2])。由于整个数据庞大,不利于观察,我们使用.shape来观察取出数据的情况。
#创建一个全为1的四维tensor,默认float32
a = tf.ones([2,3,3,2])
# 返回3,3,2的tensor
a[0].shape
#取出3行2列的矩阵tensor
a[0][0].shape
#返回长度为2列表tensor
a[0][0][0].shape
#值为标量1,是0维tensor.
a[0][0][0][1].shape
我们可以把这个四维tensor,[2,3,3,2],理解为,有2个班级,每个班级有3名同学,每名同学有3门科目,每门科目有2份作业。
a[0] 可以理解为,第0个班级的所有数据,它包含3名同学,每名有3门科目,每科目有2份作业。因此,a[0] 是一个三维tensor,形状为[3,3,2]
a[0][0] 可以理解为,第0个班级的第0个同学的所有数据,它包含3门科目,每科目有2份作业。因此,a[0][0] 是一个二维tensor,形状为[3,2]
同理其他两个

1.2 变量[ , ] 方法
我们创建一个四维随即正态分布的tensor,形状shape为[4,5,6,7],我们同样可以用上一个理解方法来看这个四维tensor。4个班级,每班5个人,每人6门课,每门课7份作业。
#创建一个四维随机正态分布tensor
a = tf.random.normal([4,5,6,7])
#
a[1].shape # 返回[5,6,7]
#
a[1,2].shape # 返回[6,7]
#
a[1,2,3].shape # 返回[7]
#
a[1,2,3,4] # 返回值
a[1,2] 代表第1个班级中,第2名学生的所有信息,包含6门功课,每门课7份作业。因此,a[1,2].shape是一个二维tensor,形状为[6,7]。该方法a[1,2]等同于上述的a[1][2]。可以少写括号且更直观。
a[1,2,3,4] 代表第1个班级中的第2名学生的第3门功课的第4份作业的信息,返回一个值。

本文详细介绍了TensorFlow2.0中索引与切片的各种操作,包括给定维度索引、切片索引、省略号应用、tf.gather()和tf.gather_nd()方法以及布尔索引。通过实例展示了如何选取和操作多维张量的数据,帮助理解张量的高效操作。
最低0.47元/天 解锁文章
3580

被折叠的 条评论
为什么被折叠?



