tf.concat与tf.stack的区别

import tensorflow as tf

a = tf.constant([[1,2,3],[4,5,6]])
b = tf.constant([[7,8,9],[10,11,12]])
c1 = tf.concat([a,b],axis=0)
s1 = tf.stack([a,b], axis=0)
c2 = tf.concat([a,b],axis=1)
s2 = tf.stack([a,b], axis=1)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(c1))
print("\n")
print(sess.run(c2))
print("\n")
print(sess.run(s1))
print("\n")
print(sess.run(s2))

输出结果如下:

[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]

[[[ 1  2  3]
  [ 4  5  6]]
 [[ 7  8  9]
  [10 11 12]]]

[[[ 1  2  3]
  [ 7  8  9]]
 [[ 4  5  6]
  [10 11 12]]]

从上面可以可以看出,tf.concat不改变拼接前后矩阵的维数(这个维数是指原来是2维的,拼接后也是2维的,而不是三维的)。但是会改变对应的维数的大小。比如axis=0的时候,行数增加了,表示在0轴上进行拼接,axis=1的时候列数增加了,表示在1轴上进行拼接。

tf.stack会改变前后矩阵的维数,比如拼接之前是2维的,拼接之后就都变成3维了。

  1. axis=0表示将拼接之前的矩阵的0轴所在的元素用[]括起来(上面的例子中就是将矩阵1的每一行的元素[1 2 3]与[4 5 6]用[]括起来),之后将这个整体作为新的矩阵的一个元素。
  2. axis=1表示将拼接之前的每个矩阵的1轴所在的元素对应起来之后用[]括起来(上面的例子中就是将矩阵1的列方向的第一个元素[1 2 3]与矩阵2的列方向的第一个元素[7 8 9]用[]括起来),之后将这个整体作为新的矩阵的一个元素。

也可以看出,axis=0是将矩阵内部的元素进行组合(不涉及与其他矩阵的元素进行组合),作为新矩阵的一个元素,axis=1是将每个矩阵对应的元素进行组合(涉及与其他矩阵的元素进行组合),作为新矩阵的一个元素。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值