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)的张量Xlen(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)
<ipython-input-58-06a10640a6fa> in <module>
      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的维数在输出形状中丢失。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值