今天主要是完成线性代数相关的知识回顾以及常用代码梳理。
通过arange列出20个元素,再通过reshape构建成5行4列的矩阵:
A = torch.arange(20).reshape(5,4)
A
将A矩阵进行矩阵的转置:
A.T
判断是否为对称矩阵:
B == B.T
向量就是标量的推广,矩阵是向量的推广,我们可以构建具有更多轴的数据结构:
X = torch.arange(24).reshape(2,3,4)
X#这就是一个三维的张量,4是行数,3是列数,2是分维度
结果如下:
tensor([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
指定求和汇总张量的轴:
A = torch.arange(40).reshape(2,5,4)
A.shape,A.sum()
A_sum_axis0=A.sum(axis=0)#按照以一个维度求和把剩下的两个维度留下来
A_sum_axis0,A_sum_axis0.shape
结果如下:
(tensor([[20, 22, 24, 26],
[28, 30, 32, 34],
[36, 38, 40, 42],
[44, 46, 48, 50],
[52, 54, 56, 58]]),
torch.Size([5, 4])
一个与求和相关的量是平均值(mean或average),平均值只能用于float,即arange时就需要将数定义为浮点型,代码如下:
A = torch.arange(40,dtype=torch.float32).reshape(2,5,4)
A.shape,A.sum()
A.mean(axis=0),A.sum(axis=0)/A.shape[0]
计算总和或均值时保持轴数不变:
sum_A= A.sum(axis=1,keepdims=True)
sum_A#keepdims=True将所变化轴数保留为1,这样就可以通过广播机制将A除以sum_A
某个轴计算A元素的累加总和:
A.cumsum(axis=0)
点积是相同位置的按元素乘积的和(结果应为标量):
torch.dot(x,y)
矩阵与向量相乘:
torch.mv(A,x)
矩阵与矩阵相乘:
torch.mm(A,B)
L2范数(向量元素平方和的平方根):
u = torch.tensor([3.0,-4.0])
torch.norm(u)
L1范数,他表示为向量元素的绝对值之和:
torch.abs(u).sum()
矩阵的佛罗贝尼乌斯范数是矩阵元素的平方和的平方根:
torch.norm(torch.ones((4,9)))