05线性代数 问题笔记

05线性代数 问题笔记,第1张

05线性代数 问题笔记 P1 线性代数

P2 线性代数实现

课程代码对应Judpyter笔记本中的位置:d2l-zh/pytorch/chapter_preliminaries/linear-algebra.ipynb

练习:

  • 证明一个矩阵퐀的转置的转置是퐀:(퐀⊤)⊤=퐀。
A = torch.arange(6).reshape(2,3)
A.T.T==A
tensor([[True, True, True],
        [True, True, True]])
  • 出两个矩阵퐀和퐁,显示转置的和等于和的转置:퐀⊤+퐁⊤=(퐀+퐁)⊤。
A = torch.arange(6).reshape(2,3)
B = torch.ones(6).reshape(2,3)
A.T+B.T==(A+B).T
tensor([[True, True],
        [True, True],
        [True, True]])
  • 给定任意方矩阵퐀,퐀+퐀⊤总是对称的吗?为什么?
A = torch.arange(9).reshape(3,3)
(A+A.T).T==A+A.Ttensor([[True, True],
        [True, True],
        [True, True]])

 (A+A.T).T=A.T+(A.T).T=A.T+A

  • 我们在本节中定义了形状(2,3,4)的张量X。len(X)的输出结果是什么?
  • 对于任意形状的张量X,len(X)是否总是对应于X特定轴的长度?这个轴是什么?
X = torch.arange(24).reshape(4,3,2)
Y = torch.arange(24).reshape(2,3,4)
Z = torch.arange(24).reshape(3,2,4)
Q =torch.arange(12).reshape(3,4)
T =torch.arange(12).reshape(1,2,3,2)
len(X),len(Y),len(Z),len(Q),len(T)

(4, 2, 3, 3, 1)

 看上去是的,都是第0轴。

  • 运行A/A.sum(axis=1),看看会发生什么。你能分析原因吗?
A = torch.arange(12, dtype=torch.float32).reshape(3,4)
A/A.sum(axis=1)

RuntimeError                              Traceback (most recent call last)
 in 
      1 A = torch.arange(12, dtype=torch.float32).reshape(3,4)
      2 
----> 3 A/A.sum(axis=1)

RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimension 1

 A.sum(axis=1)把列降维,结果为tensor([ 6., 22., 38.]),不能和列数为4的矩阵进行运算(方阵时候可以)

  • 当你在曼哈顿的两点之间旅行时,你需要在坐标上走多远,也就是说,就大街和街道而言?你能斜着走吗?

首先去不了曼哈顿。街道中两点坐标距离不能斜着走,走的是一范数吧 

  • 考虑一个具有形状(2,3,4)的张量,在轴0,1,2上的求和输出是什么形状?
A = torch.arange(24).reshape(2,3,4)
A_sum_axis0 = A.sum(axis=0)
A_sum_axis1 = A.sum(axis=1)
A_sum_axis2 = A.sum(axis=2)
A,A_sum_axis0,A_sum_axis1,A_sum_axis2

(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]]]),
 tensor([[12, 14, 16, 18],
         [20, 22, 24, 26],
         [28, 30, 32, 34]]),
 tensor([[12, 15, 18, 21],
         [48, 51, 54, 57]]),
 tensor([[ 6, 22, 38],
         [54, 70, 86]]))
  • 向linalg.norm函数提供3个或更多轴的张量,并观察其输出。对于任意形状的张量这个函数计算得到什么?
A = torch.arange(6, dtype=torch.float32).reshape(1,2,3)
B = torch.arange(12, dtype=torch.float32).reshape(1,2,3,2)
torch.linalg.norm(A),torch.linalg.norm(B)

(tensor(7.4162), tensor(22.4944))

 得到的是矩阵的弗罗贝尼乌斯范数(Frobenius norm),即矩阵元素平方和的平方根

linalg.norm函数求范数参考链接:numpy.linalg.norm(求范数) - 理想几岁 - 博客园

P3 按特定轴求和

默认情况下,调用求和函数会沿所有的轴降低张量的维度,使它变为一个标量。 我们还可以[指定张量沿哪一个轴来通过求和降低维度]。以矩阵为例,为了通过求和所有行的元素来降维(轴0),我们可以在调用函数时指定axis=0。 由于输入矩阵沿0轴降维以生成输出向量,因此输入的轴0的维数在输出形状中丢失。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5657544.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存