图像处理中的涉及多维数组/向量计算,简化实践记录加法计算,add(+) 和 cat 两种方式。
简单案例叙述:
- 仿照图像H*W*C,3×3×3张量(tensor)A和B。
- C表示A和B的cat
- D表示A和B的add
解说记录版:
import torch
######################################
print("__________A_____________")
A=torch.ones(3,3,3)
print(A)
print(A.shape)
######################################
⚪3x3x3的张量(全1矩阵)
__________A_____________
tensor([[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]]])
torch.Size([3, 3, 3])
######################################
######################################
print("__________B_____________")
B=2*torch.ones(3,3,3)#3x3x3的张量(矩阵)
print(B)
print(B.shape)
######################################
⚪3x3x3的张量(全2矩阵)
__________B_____________
tensor([[[2., 2., 2.],
[2., 2., 2.],
[2., 2., 2.]],
[[2., 2., 2.],
[2., 2., 2.],
[2., 2., 2.]],
[[2., 2., 2.],
[2., 2., 2.],
[2., 2., 2.]]])
torch.Size([3, 3, 3])
######################################
print("__________C_____________")
C=torch.cat((A[:,:1,:],B[:,:1,:]),1)
print(C)
print(C.shape)
######################################
⚪[:,:1,:]:第1维全取,第2维取第0个,第3维全取
⚪维数0:按行拼接
⚪维数1:按列拼接
⚪观察到C是3×2×3
⚪第1维和第3维保持不变,
⚪第2维是A和B的对应按列拼接。
__________C_____________
tensor([[[1., 1., 1.],
[2., 2., 2.]],
[[1., 1., 1.],
[2., 2., 2.]],
[[1., 1., 1.],
[2., 2., 2.]]])
torch.Size([3, 2, 3])
######################################
print("__________D_____________")
D = A[:,:1,:] + B[:,:1,:]
print(D)
print(D.shape)
######################################
⚪[:,:1,:]:第1维全取,第2维取第0个,第3维全取
⚪观察到C是3×1×3
⚪第1维和第3维保持不变,
⚪第2维是A和B的对应数值相加得到3。
__________D_____________
tensor([[[3., 3., 3.]],
[[3., 3., 3.]],
[[3., 3., 3.]]])
torch.Size([3, 1, 3])
######################################
自行实践/修改,观察变化:
import torch
print("__________A_____________")
A=torch.ones(3,3,3) #3x3x3的张量(矩阵)
print(A)
print(A.shape)
print("__________B_____________")
B=2*torch.ones(3,3,3)#3x3x3的张量(矩阵)
print(B)
print(B.shape)
print("__________C_____________")
C=torch.cat((A[:,:1,:],B[:,:1,:]),1)
print(C)
print(C.shape)
print("__________D_____________")
D = A[:,:1,:] + B[:,:1,:]
print(D)
print(D.shape)
- C=torch.cat((A,B),0)就表示按维数0(行)拼接A和B,也就是竖着拼接,A上B下。
- 注意:列数必须一致,即维数1数值要相同。
- C=torch.cat((A,B),1)就表示按维数1(列)拼接A和B,也就是横着拼接,A左B右。
- 注意:行数必须一致,即维数0数值要相同。
- 注意:行数必须一致,即维数0数值要相同。