import torch #标量由只有一个元素的张量表示 ''' x = torch.tensor(3.0) y = torch.tensor(2.0) print(x + y) print(x * y) print(x / y) print(x ** y) ''' ''' 向量可以被视为标量值组成的列表,这些标量值被称为向量的元素 在数学上,具有一个轴的张量表示向量,一般张量具有任意长度,取决于机器的内存 ''' ''' x = torch.arange(4) print(x) #认为列向量是向量的默认方向,可以用下标访问一个向量中的任意元素(标量的) print(x[3]) #一个向量的长度通常称为向量的维度 print(len(x)) #当张量(只有一个轴)表示向量时,我们可以通过.shape属性访问向量的长度. #形状是一个元素组,列出了张量沿每个轴的长度(维数),对于只有一个轴的张量 #形状只有一个元素 print(x.shape) ''' ''' 注意 向量或轴的维度被用来表示向量或轴的长度,即向量或轴的元素数量, 而张量的维度用于 表示张量具有的轴的数量. 所以可以这样说: 张量的某个轴的维数(标量的维数)就是这个轴的长度. ''' ''' #我们可以这样创建矩阵(具有两个轴的张量) A = torch.arange(20).reshape(5, 4) print(A) #矩阵的转置 B = A.T print(B) ''' ''' 这里说一下:尽管单个向量的默认方向为列向量,但是在表示表格数据集的矩阵中, 将每个数据样本作为矩阵的行向量更为常见。 ''' #向量是标量的推广,矩阵是向量的推广。也可以说向量是一阶张量,矩阵是二阶张量 #所以张量是描述具有任意数量轴的n维数组的通用方法 #一个张量例子 ''' x = torch.arange(24).reshape(2, 3, 4) print(x) y = x.clone() print(x * y) #并非矩阵相乘,而是两个矩阵对应元素分别相乘 ''' ''' #张量加上或乘以一个标量都不会改变张量的形状,其中张量的每个元素都将与标量相加或相乘 a = 2; x = torch.arange(20).reshape(2, 10) print((x + a).shape) ''' ''' print(id(x)) #.clone开辟一块新内存,复制张量x的内容 print(id(y)) ''' #求和(.sum函数可以求任意形状张量的元素和) ''' x = torch.arange(4, dtype = torch.float32) print(x) print(x.sum()) ''' ''' #求和时可以指定延哪个轴求和,这样可以通过求和降低维度 A = torch.arange(20, dtype = torch.float32).reshape(5, 4) A_sum_axis0 = A.sum(axis = 0) print(A_sum_axis0) print(A_sum_axis0.shape) A_sum_axis1 = A.sum(axis = 1) print(A_sum_axis1) print(A_sum_axis1.shape) #沿着行和列对矩阵求和,等同于对矩阵所有元素求和 A_sum = A.sum(axis=[0, 1]) print(A_sum) #与求和类似,求平均值也是如此 print(A.mean()) print(A.sum() / A.numel()) print(A.mean(axis = 0)) print(A.sum(axis = 0) / A.shape[0]) #等价与上面 #非降维求和 sum_A = A.sum(axis = 1, keepdims = True) print(sum_A) #我们求和后不降低维度可以再进行除法等操作 print(A / sum_A) #计算沿某个轴的累加和,且不会改变输入张量的维度 print(A.cumsum(axis = 0)) print(A) ''' #点积 y = torch.ones(4, dtype = torch.float32) x = torch.arange(4, dtype = torch.float32) print(torch.dot(x, y)) #矩阵————向量积 A = torch.arange(20, dtype = torch.float32).reshape(5, 4) x = torch.arange(4, dtype = torch.float32) print(A) print(x) #A为[5][4],x为[4].将A中每个行向量与x向量点乘 print(torch.mv(A, x)) #矩阵————矩阵乘法 B = torch.ones(4, 3) print(torch.mm(A, B)) print(A) print(B) #不要将矩阵乘法与哈达玛积(对应元素相乘)混淆 #范数 #非正式的说,向量的范数表示一个向量有多大.这里的大小不涉及维度,而是分量的大小 u = torch.tensor([3.0, -4.0]) print(torch.norm(u)) #L2范数:平方和开根号 print(torch.abs(u).sum()) #L1范数:向量元素绝对值之和 #弗罗贝尼乌斯范数(具有向量范数的所有性质,就像矩阵型向量的L2范数): #为矩阵元素平方和的平方根 print(torch.norm(torch.ones((4, 9))))
标签:灰灰,day6,sum,torch,矩阵,张量,线性代数,print,向量 From: https://www.cnblogs.com/fighting-huihui/p/17454277.html