torch.cat ( )和 np.concatenate() 的用法

一. torch.cat( )

1. 用法:

        按照指定的维度,将两个terson数据拼接在一起;

2. 实例:

improt torch

A = torch.tensor(np.array([[1,2,3],[4,5,6]])) #2×3的张量
tensor([[1, 2, 3],
        [4, 5, 6]])
B = torch.tensor(np.array([[7,8],[10,11]])) #2×2的张量
tensor([[ 7,  8],
        [10, 11]])
C = torch.cat([A, B],dim=1) #按照张量维度1(列)进行拼接,维度变为2×5
tensor([[ 1,  2,  3,  7,  8], 
        [ 4,  5,  6, 10, 11]])
D = torch.tensor(np.array([[2,3,4],[10,11,12],[5,6,7]])) #3×3的张量
tensor([[ 2,  3,  4],
        [10, 11, 12],
        [ 5,  6,  7]])
E = torch.cat([A,D], dim=0) #按照张量维度0(行)进行拼接,维度变为5×3
tensor([[ 1,  2,  3],
        [ 4,  5,  6],
        [ 2,  3,  4],
        [10, 11, 12],
        [ 5,  6,  7]])


两个张量A和B,分别是2行3列,2行2列。即他们都是2维张量。因为只有两维,这样在用torch.cat拼接的时候就有两种拼接方式:按行拼接和按列拼接。即所谓的维数0和维数1. 

C=torch.cat((A,B),1)就表示按维数1(列)拼接A和B,也就是横着拼接,A左B右。此时需要注意:行数必须一致,即维数0数值要相同,这里都是2行,方能行对齐。拼接后的C的第1维是两个维数1数值和,即2+3=5.

E=torch.cat((A,D),0)就表示按维数0(行)拼接A和B,也就是竖着拼接,A上B下。此时需要注意:列数必须一致,即维数0数值要相同,这里都是3列,方能列对齐。拼接后的C的第0维是两个维数0数值和,即2+3=5.

注:使用torch.cat((A,B),dim)时,除拼接维数dim数值可不同外其余维数数值需相同,方能对齐。

二. np.concatenate() 

1 .用法:

        np.concatenate 是numpy中对array进行拼接的函数。

2. 实例:

import numpy as np

#创建2×3的数组A,B
A = np.array([[1,2,3],[4,5,6]])
B = np.array([[7,8,9],[10,11,12]])

A:[[1 2 3]
   [4 5 6]]
B:[[ 7  8  9]
   [10 11 12]]
con = np.concatenate([A,B],axis=0)  #按照0维度拼接,得到4×3的数组
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
con1 = np.concattenate([A,B],AXIS=1) #按照1维度拼接,得到2×6的数组
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]

axis参数为指定按照哪个维度进行拼接,上述的例子中A为[2,3] B为[2,3],设置axis=0则代表着按照第一维度进行拼接,拼接后的尺寸为[4,3]除了第一维度的尺寸发生变化,其他维度不变,同时也说明,必须保证其他维度的尺寸是能对的上的,假设A为[5,4],B为[5,3],在这里如果还设置axis=1的话,则会报错,因为x1和x2的第二维度尺寸不相等,无法拼接。
 

猜你喜欢

转载自blog.csdn.net/m0_62278731/article/details/131172463