Tensorflow2.0之根据索引号收集数据

本文深入探讨了TensorFlow中tf.gather与tf.gather_nd函数的使用技巧,包括如何根据索引号收集多维数据,适用于不规则索引及多维度坐标数据收集场景,极大提升了数据处理效率。

Tensorflow之根据索引号收集数据

tf.gather

tf.gather 可以实现根据索引号收集数据的目的。考虑班级成绩册的例子,共有4个班,每个班35个学生,8门学科,保存成绩册的张量shape为[4,35,8]。

x = tf.random.uniform([4,35,8],maxval=100,dtype=tf.int32)

现在需要收集1-2班的成绩册,可以给定班级索引号:[0,1]/[:2],班级的维度为axis=0:

In [38]:tf.gather(x,[0,1],axis=0) # 在班级维度收集第1-2 号班级成绩册
Out[38]:<tf.Tensor: id=83, shape=(2, 35, 8), dtype=int32, numpy=
array([[[43, 10, 93, 85, 75, 87, 28, 19],
[52, 17, 44, 88, 82, 54, 16, 65],
[98, 26, 1, 47, 59, 3, 59, 70],

实际上,对于上述需求,通过切片𝑥[: 2]可以更加方便地实现。但是对于不规则的索引方式,比如,需要抽查所有班级的第1,4,9,12,13,27 号同学的成绩,则切片方式实现起来非常麻烦,而tf.gather 则是针对于此需求设计的,使用起来非常方便:

In [39]: # 收集第1,4,9,12,13,27 号同学成绩
tf.gather(x,[0,3,8,11,12,26],axis=1)
Out[39]:<tf.Tensor: id=87, shape=(4, 6, 8), dtype=int32, numpy=
array([[[43
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值