7 、合并与分割

1、concat,拼接 

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

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

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

 cancat要求除了指定合并的维度之外,其余的维度要大小要相同

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)

2、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)

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

1 #3、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)

4、split ,在对一个张量进行切割之后,可以指定要分割之后的数量 

 1 #4、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)

猜你喜欢

转载自www.cnblogs.com/pengzhonglian/p/11933840.html