1.torch.cat()
1. 使用方法:
指定された次元に従って 2 つのターソン データを結合します。
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]])
2 つのテンソル A と B は、それぞれ 2 行 3 列、および 2 行 2 列です。つまり、それらはすべて 2 次元テンソルです。次元が 2 つしかないため、torch.cat を使用する場合は、行によるスプライシングと列によるスプライシングの 2 つのスプライシング方法があります。いわゆる0次元と1次元です。
C=torch.cat((A,B),1) は、次元 1 (列) に従って A と B を接合すること、つまり、A を左側、B を右側にして水平に接合することを意味します。このとき、行の数は一貫している必要があります。つまり、次元 0 の値が同じである必要があります。ここではすべて 2 行であるため、行を揃えることができます。スプライシング後の C の最初の次元は、2 つの次元の数値合計 1、つまり 2+3=5 です。
E=torch.cat((A,D),0) は、次元 0 (行) に従って A と B を接合すること、つまり、A が上、B が下になるように垂直に接合することを意味します。このとき注意が必要なのは、列数が一致していること、つまり次元0の値が同じであることですが、ここでは列を揃えるために3列あります。スプライシング後の C の 0 番目の次元は、2 つの次元の 0 の値の合計、つまり 2+3=5 になります。
注: torch.cat((A,B),dim) を使用する場合、スプライシング寸法の dim 値が異なる場合を除き、位置を揃えるためには他の寸法値が同じである必要があります。
2.np.concatenate()
1. 使用方法:
np.concatenate は、配列を連結するnumpyの関数です。
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 の 2 番目の寸法が等しくなく、結合できないため、エラーが報告されます。