# 学习时间:2022/2/22 16:19#1、标量import torchx=torch.tensor([3.0])y=torch.tensor([2.0])print(x+y,x*y,x/y,x**y)#2.向量:可以将其视为标量组成的列表x=torch.arange(4)print(x)#可以通过索引访问任意元素print(x[3])#访问张量的长度print(len(x))#只有一个轴的张量,形状只有一个元素print(x.shape)#通过指定分量m,n来创建一个形状为m*n的矩阵A=torch.arange(20).reshape(5,4)print(A)'''tensor([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19]])'''print((A.T))'''tensor([[ 0, 4, 8, 12, 16], [ 1, 5, 9, 13, 17], [ 2, 6, 10, 14, 18], [ 3, 7, 11, 15, 19]])'''#对称矩阵B=torch.tensor([[1,2,3],[2,0,4],[3,4,5]])print(B==B.T)'''tensor([[True, True, True], [True, True, True], [True, True, True]])'''#向量是标量的推广,矩阵是向量的推广,可以构造更多轴的数据结构x=torch.arange(24).reshape(2,3,4)print(x)'''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(20,dtype=torch.float32).reshape(5,4)B=A.clone()#通过分配新内存,将A的副本分配给Bprint(A,A+B)print(A*B)#两个矩阵的按元素乘法称为 哈达玛积a=2X=torch.arange(24).reshape(2,3,4)print(a+X,(a*X).shape)#计算元素和x=torch.arange(4,dtype=torch.float32)print(x,x.sum())#表示任意形状张量的元素和A=torch.arange(20*2).reshape(2,5,4)print(A.shape,A.sum())#指定求和和汇总张量的轴A_sum_axis0=A.sum(axis=0)#对第一个维度求和print(A)print(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])'''A_sum_axis1=A.sum(axis=1)print(A_sum_axis1,A_sum_axis1.shape)#对第二个维度(指定的行求和)'''tensor([[ 40, 45, 50, 55], [140, 145, 150, 155]]) torch.Size([2, 4])'''print(A.sum(axis=[0,1]))#对两个维度进行求和'''tensor([180, 190, 200, 210])'''#一个于求和相关的量是平均值(mean or average)A=torch.arange(20,dtype=torch.float32).reshape(5,4)print(A.mean(),A.sum()/A.numel())print(A.mean(axis=0),A.sum(axis=0)/A.shape[0])#计算总和或均值时保持轴数不变sum_A=A.sum(axis=1,keepdims=True)print(sum_A)'''tensor([[ 6.], [22.], [38.], [54.], [70.]])'''print(A/sum_A)#运用广播机制'''tensor([[0.0000, 0.1667, 0.3333, 0.5000], [0.1818, 0.2273, 0.2727, 0.3182], [0.2105, 0.2368, 0.2632, 0.2895], [0.2222, 0.2407, 0.2593, 0.2778], [0.2286, 0.2429, 0.2571, 0.2714]])'''print(A.cumsum(axis=0))#点积是相同位置的按元素乘积的和x=torch.arange(4,dtype=torch.float32)y=torch.ones(4,dtype=torch.float32)print(x,y,torch.dot(x,y))#可以通过执行按元素乘法,然后进行求和表示两个向量的点积print(torch.sum(x*y))#矩阵(m*n)向量(n)的积为一个m的列向量print(A.shape,x.shape,torch.mv(A,x))#两个矩阵A(n*m)B(m*r),可以看作执行m次矩阵-向量积,并进行拼接,形成n*rB=torch.ones(4,3)print(torch.mm(A,B))#L2范数是向量元素平方和的平方根u=torch.tensor([3.0,4.0])print(torch.norm(u))'''tensor(5.)'''#L1范数是向量绝对值和print(torch.abs(u).sum())'''tensor(7.)'''#矩阵的弗罗贝尼乌斯范数(Frobenius norm)是矩阵元素的平方和的平方根print(torch.norm(torch.ones(4,9)))'''tensor(6.)'''#问题回答'''1、数值变得稀疏2、深度学习为什么用张量表示?统计学利用张量进行表示3、copy和clone的区别?copy不一定赋值内存(浅层copy和深层copy),clone一定是赋值内存4、torch不区分行向量和列向量吗?(一维张量一定是行向量,列向量是一个矩阵(n,1))5、稀疏化之后有什么好的解决办法?稀疏矩阵方法?减少内存?'''
五、线性代数
时间:2023-04-25
相关推荐