7 、合并与分割

一、concat,拼接 

 例:统计班级的学生的分数ui

  a = [class1-4,student,scores],4个班级,35个学生,8门课的分数spa

  b = [class5-6,student,scores],2个班级,35个学生,8门课的分数code

 cancat要求除了指定合并的维度以外,其他的维度要大小要相同blog

1 a = tf.ones([4,35,8]) 2 b = tf.ones([2,35,8]) 3 c = tf.concat([a,b],axis = 0)  #参数要用[]括起来,并且要指定维度,TypeError: concat() missing 1 required positional argument: 'axis'
4 print(c.shape)  #(6, 35, 8)
5 
6 a = tf.ones([4,35,8]) 7 b = tf.ones([4,3,8]) #除了指定的维度,其他的维度要相同
8 c = tf.concat([a,b],axis = 1) 9 print(c.shape) #(4, 38, 8)

二、stack,建立一个新维度,须要合并建立一个新维度的全部张量的维度同样

 1 #建立新的维度须要全部维度的大小是同样的
 2 a = tf.ones([4,35,8])
 3 b = tf.ones([4,35,8])
 4 
 5 c1 = tf.concat([a,b],axis=-1)
 6 print(c1.shape) #(4, 35, 16)
 7 
 8 c2 = tf.stack([a,b],axis=0) # 在第一个维度以前建立新的维度
 9 print(c2.shape) #(2, 4, 35, 8)
10 
11 c3 = tf.stack([a,b],axis=3)  #在最后一个维度以后建立新的维度
12 print(c3.shape) #(4, 35, 8, 2)

三、unstack 对一个张量进行切割,按指定的维度分红等数量的个数,如[4,35,8]指定在第一维度上进行切割,那么会切割成4个[35,8]的张量

1 #三、unstack分割数据
2 a = tf.ones([4,35,8]) 3 b = tf.ones([4,35,8]) 4 
5 c = tf.stack([a,b],axis=0) 6 print(c.shape) #(2, 4, 35, 8)
7 
8 aa,bb = tf.unstack(c,axis=0) 9 print(aa.shape,bb.shape) #分割成两个同样的(4, 35, 8)

四、split ,在对一个张量进行切割以后,能够指定要分割以后的数量 it

 1 #四、split
 2 a = tf.ones([4,35,8])  3 b = tf.ones([4,35,8])  4 
 5 c = tf.stack([a,b],axis=0)  6 print(c.shape)  7 
 8 res = tf.unstack(c,axis=3) #生成8个[4,35]张量的list
 9 print(len(res)) # 8
10 
11 res = tf.split(c,axis=3,num_or_size_splits=2) #num_or_size_split指定要分割的份数,也能够指定每一份张量数,用列表装着
12 print(len(res)) # 2 生成两个(2, 4, 35, 4)
13 print(res[0].shape) # (2, 4, 35, 4)
14 
15 res = tf.split(c,axis=3,num_or_size_splits=[1,2,3,2]) #指定划分后的张量的个数,并对划分后每一个张量的维度大小进行指定
16 print(res[0].shape) #(2, 4, 35, 1)
17 print(res[1].shape) #(2, 4, 35, 2)
18 print(res[2].shape) #(2, 4, 35, 3)
19 print(res[3].shape) #(2, 4, 35, 2)
相关文章
相关标签/搜索