tensorflow2.x学习笔记二十一:张量的定义、切片
一、创建张量
二 ,索引切片
-
张量的索引切片方式和numpy几乎是一样的。切片时支持缺省参数和省略号。
-
对于
tf.Variable
,可以通过索引和切片对部分元素进行修改。 -
对于提取张量的连续子区域,也可以使用
tf.slice.
-
此外,对于不规则的切片提取,可以使用
tf.gather
,tf.gather_nd
,tf.boolean_mask。
-
tf.boolean_mask
功能最为强大,它可以实现tf.gather,
tf.gather_nd
的功能,并且tf.boolean_mask
还可以实现布尔索引。 -
如果要通过修改张量的某些元素得到新的张量,可以使用
tf.where,
tf.scatter_nd。
以上切片方式相对规则,对于不规则的切片提取,可以使用tf.gather,
tf.gather_nd,
tf.boolean_mask。
考虑班级成绩册的例子,有4个班级,每个班级10个学生,每个学生7门科目成绩。可以用一个4107的张量来表示。
以上tf.gather
和tf.gather_nd
的功能也可以用tf.boolean_mask
来实现。
-
以上这些方法仅能提取张量的部分元素值,但不能更改张量的部分元素值得到新的张量。
-
如果要通过修改张量的部分元素值得到新的张量,可以使用
tf.where
和tf.scatter_nd。
-
tf.where
可以理解为if
的张量版本,此外它还可以用于找到满足条件的所有元素的位置坐标。 -
tf.scatter_nd
的作用和tf.gather_nd
有些相反,tf.gather_nd
用于收集张量的给定位置的元素, -
而
tf.scatter_nd
可以将某些值插入到一个给定shape的全0的张量的指定位置处。
参考文章:eat_tensorflow2_in_30_days
关于tf.where
,tf.boolean_mask
的具体解释请看我的另一篇博客:tensorflow2.x学习笔记二十二:tf.where和tf.boolean_mask的使用