其他分享
首页 > 其他分享> > 李沐笔记+课后练习(线性代数)

李沐笔记+课后练习(线性代数)

作者:互联网

标量:

 

向量:

 

 

 

 矩阵:

 

 

 

 

特殊矩阵:

 

 

 

 

 

 线性代数实现:

import torch

# 标量由只有一个元素的张量表示
x = torch.tensor([3.0])
y = torch.tensor([2.0])

print(x+y, x*y, x/y, x**y)

# 可以将向量视为标量值组成的列表
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)

# 矩阵的转置
print(A.T)

# 对称矩阵 A=A.T
B = torch.tensor([[1,2,3],[2,0,4],[3,4,5]])
print(B, B == B.T, sep='\n')

# 向量是标量的推广,矩阵是向量的推广,可以构建具有更多轴的数据结构
X = torch.arange(24).reshape(2,3,4)
print(X)

# 给定任何相同形状的任何两个张量,任何按元素二元运算的结果都将是相同形状的张量
A = torch.arange(20,dtype=torch.float32).reshape(5,4)
B = A.clone()  # 通过分配新内存,将A的一个副本分配给B
print(A,A+B)

# 两个矩阵的按元素乘法称为哈达玛积(⊙)
print(A*B)
a = 2
X = 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,dtype=torch.float32).reshape(5,4)
print(A.shape,A.sum())

# 指定求和汇总张量的轴
A_sum_axis0 = A.sum(axis=0)  # 通过求和所有行的元素降维
print(A_sum_axis0, A_sum_axis0.shape)
A_sum_axis1 = A.sum(axis=1)  # 通过汇总所有列的元素降维,轴1的维数在输出形状中消失
print(A_sum_axis1,A_sum_axis1.shape)
print(A.sum(axis=[0,1]).shape)  # 等价于对所有元素求和

# 一个与求和相关的量是平均值(mean或average)
print(A.sum() / A.numel())
print(A.mean())  # 需要将A的值转成float,不然会报错

# 计算平均值的函数也可以沿指定轴降低张量的维度
print(A.mean(axis=0),A.sum(axis=0) / A.shape[0])

# 计算总和或均值时保持轴数不变
sum_A = A.sum(axis=1,keepdims=True)  # keepdims=True保持原来的维数
print(sum_A)

# 通过广播将A除以sum_A
print(A / sum_A)

# 沿某个轴计算A元素的累积总和
print(A.cumsum(axis=0))

# 点积是相同位置的按元素乘积的和
y = torch.ones(4,dtype=torch.float32)
print(x, y, torch.dot(x,y))

# 通过执行按元素乘法,然后进行求和来表示两个向量的点积
print(torch.sum(x * y))

# 矩阵向量积Ax是一个长度为m的列向量
print(A.shape, x.shape, torch.mv(A, x))  # torch.mv()是矩阵和向量相乘

# 矩阵-矩阵乘法AB看作是简单地执行m次矩阵-向量积,并将结果拼接在一起,形成一个n*m矩阵
B = torch.ones(4, 3)
print(torch.mm(A, B))  # torch.mm()是矩阵正常的矩阵相乘,(a, b)* ( b, c ) = ( a, c )

# L2范数是向量元素平方和的平方根
u = torch.tensor([3.0, -4.0])
print(torch.norm(u))

# L1范数是向量元素的绝对值之和
print(torch.abs(u).sum())

# 矩阵的弗罗贝尼乌斯范数是矩阵元素的平方和的平方根
print(torch.norm(torch.ones((4,9))))

 课后练习:

  1. 证明一个矩阵 A 的转置的转置是 A。
  2. 给出两个矩阵 A 和 B, 显示转置的和等于和的转置:AT+BT=(A+B)T.
  3. 给定任意方矩阵 A,A+AT总是对称的吗?为什么?

 

import torch

# 1证明一个矩阵 A 的转置的转置是 A
A = torch.tensor([[1,2,3],[2,3,4],[3,4,5]])
print(A.T.T == A)

# 2给出两个矩阵 A 和 B, 显示转置的和等于和的转置
B = torch.arange(9).reshape(3,3)
print(A.T+B.T == (A+B).T)

# 3给定任意方矩阵A,A+AT总是对称的吗
print((A+A.T) == (A+A.T).T)

 

 

 

 

 

标签:元素,转置,sum,torch,矩阵,print,线性代数,李沐,课后练习
来源: https://blog.csdn.net/qq_42310607/article/details/120577690