目录
a = tf.constant([[1,2,3],[3,4,5]]) # shape (2,3)
b = tf.constant([[7,8,9],[10,11,12]]) # shape (2,3)
拼接操作: (tf.concat,tf.stack)
ab1 = tf.concat([a,b], axis=0) # shape(4,3) [[ 1 2 3] [ 3 4 5] [ 7 8 9] [10 11 12]]
- tf.stack其作用类似于tf.concat,都是拼接两个张量,
- 不同之处,tf.concat拼接的是除了拼接维度axis外, 其他维度的shape完全相同的张量,并且产生的张量的阶数不会发生变化,而tf.stack则会在新的张量阶上拼接,产生的张量的阶数将会增加。
分割操作: (tf.unstack,tf.split)
tf.unstack
import tensorflow as tf a = tf.constant([[1, 2, 3], [4, 5, 6]]) b = tf.unstack(a, axis=0) c = tf.unstack(a, axis=1) with tf.Session() as sess: print(sess.run(a)) print(sess.run(b)) print(sess.run(c))
输出
[[1 2 3]
[4 5 6]]
[array([1, 2, 3], dtype=int32), array([4, 5, 6], dtype=int32)][array([1, 4], dtype=int32), array([2, 5], dtype=int32), array([3, 6], dtype=int32)]
tf.split
import tensorflow as tf a = tf.constant([[1, 2, 3], [4, 5, 6]]) b = tf.split(a,num_or_size_splits=2,axis=0) with tf.Session() as sess: print(sess.run(a)) print(sess.run(b))
[[1 2 3]
[4 5 6]]
[array([[1, 2, 3]]), array([[4, 5, 6]])]
对比总结:
import tensorflow as tf A = [[1, 2, 3], [4, 5, 6]] a0 = tf.split(A, num_or_size_splits=3, axis=1)#不改变维数(!!) a1 = tf.unstack(A, num=3,axis=1) a2 = tf.split(A, num_or_size_splits=2, axis=0) a3 = tf.unstack(A, num=2,axis=0) with tf.Session() as sess: # print(sess.run(a0)) # print(sess.run(a1)) print(sess.run(a2)) # print(sess.run(a3)