tensorflow 张量的合并何分割

合并和分割的接口:

  • tf.concat 拼接
  • tf.split 分割
  • tf.stack 堆叠
  • tf.unstack 分割
tf.concat

例如
a 收集 1-4 班的成绩: [class1-4, students, scores]
b 收集 5-8 班的成绩: [class5-6, students, scores]

# concat
a = tf.ones([4,35,8])
b = tf.ones([2,35,8])
c = tf.concat([a,b],axis=0)
print(c.shape)#(6, 35, 8)

a = tf.ones([4,35,8])
b = tf.ones([4,3,8])
print(tf.concat([a, b], axis=1).shape)#(4, 38, 8)

在这里插入图片描述

在这里插入图片描述

tf.stack 可以增加维度

School1:[classes, students, scores]
School2:[classes, students, scores]
[schools, classes, students, scores]

# stack
a = tf.ones([4,35,8])
b = tf.ones([4,35,8])
print(tf.stack([a, b], axis=0).shape)#(2, 4, 35, 8)
合并总结

合并的两种方式 : concat \ stack

对于concat :

  1. 维度要相同
  2. 某一维度的数值可以不相同,但是其他的维度的数值必须相同
  3. 总的来说,是把两个维度的某一个维度增大

对于stack :

  1. 维度要完全相同
  2. 总的来说,是在原有的维度上添加一个维度
tf.unstack
# unstack
print(c.shape)#(2, 4, 35, 8)
aa,bb = tf.unstack(c,axis=0)
print(aa.shape,bb.shape)
res = tf.unstack(c,axis=3)#(4, 35, 8) (4, 35, 8)
print(res[0].shape,res[7].shape)#(2, 4, 35) (2, 4, 35)
tf.split
#split
print(c.shape)#(2, 4, 35, 8)
res = tf.unstack(c,axis=3)#(4, 35, 8) (4, 35, 8)
print(len(res))
res = tf.split(c,axis=3,num_or_size_splits=2)
print(len(res))
res = tf.split(c,axis=3,num_or_size_splits=[2,2,4])
print(res[0].shape)#(2, 4, 35, 2)
print(res[2].shape)#(2, 4, 35, 4)
总结分割

分割的方式有两种: unstack \ split

对于 unstack :

  1. 指定某一维度,会自动将某一维度分割为(这个维度对应的值n)n个
  2. unstack是stack的逆

对于 split:

  1. 可以通过参数 num_or_size_splits 来指定分割的块,它会自动均分
  2. 也可以给参数 num_or_size_splits 传递一个序列,使得矩阵分割成指定的块
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值