ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-01 18:02:39  阅读:269  来源: 互联网

标签:元素 转置 sum torch 矩阵 print 线性代数 李沐 课后练习


标量:

 

向量:

 

 

 

 矩阵:

 

 

 

 

特殊矩阵:

 

 

 

 

 

 线性代数实现:

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有