线性代数

我感觉应该说的是曼哈顿距离,从英文翻译过来有点问题

最后第九题是让你调用torch.linalg.norm函数,然后观察结果,其实就是书上说的 张量的弗罗贝尼乌斯范数

y = torch.ones(4, dtype = torch.float32)
x, y, torch.dot(x, y)
为啥我的点积结果出来的结果是0
若是把它 dtype = torch.float32删除了,变成整型结果就是6

按维度来理解吧,不然如果嵌套多了,就不知道哪是哪了

非常好的理解方法,如果是axis=2,就是按照图像平面压扁,对吧

不知道这样理解是否合适,mxn的矩阵,axis 0对应于m,axis 1对应n,sum(axis=0) = X[0][:] + X[1][:] … + X[m-1][:],这样把对应于m的轴消除掉了,只留下对应于n的轴;同理sum(axis=1) = X[:][0] + X[:][1] … + X[:][n-1]

做作业了
1懒做2懒做
3,对称。len(X)=2,len(X)等于第一维长度。运行完A/A.sum(axis=1)所有元素在列方向上归一化(和为1)。
没去过曼哈顿但是我知道我不能斜着走。(2,3,4)在0,1,2上求和形状是(3,4)。(2,4)。(2,3)。
linalg.norm()最后都是标量,在向量中是距离,如果轴变多了,是什么呢= =

1 Like

这个有没有答案的呀,请问下,写完没有答案有点迷茫

1.运行A/A.sum(axis=1),看看会发生什么。你能分析原因吗?
–当A为方矩阵时,产生的结果形状不变;
–当A为非方矩阵,即n!=m时,会报错,因为A.sum(axis=1)的长度为n,而A中某行的长度为m,长度不匹配无法按元素相乘。
如上分析对吗?请教,谢谢!

2.3.8节——矩阵和向量集
第三行中R的上标应当是错了的。不该是Rn应该是Rm吧

#给出两个矩阵 A 和 B ,证明“它们转置的和”等于“它们和的转置”,即 A⊤+B⊤=(A+B)⊤

A = torch.arange(12, dtype=torch.float32).reshape(3, 4)

B = torch.randn(3,4)

A_re = A.T

B_re = B.T

AB_plusre = (A+B).T

A_re + B_re ==AB_plusre

#考虑一个具有形状 (2,3,4) 的张量,在轴0、1、2上的求和输出是什么形状?

C = torch.arange(24).reshape(2, 3, 4)

C_0 = C.sum(axis=0)

C_1 = C.sum(axis=1)

C_2 = C.sum(axis=2)

C_0,C_1,C_2

C_0.shape,C_1.shape,C_2.shape

#为linalg.norm函数提供3个或更多轴的张量,并观察其输出。对于任意形状的张量这个函数计算得到什么?

D = torch.randn(2,3,4)

torch.linalg.norm(D)

E = torch.ones(2,3,4)

torch.norm(E)

第一次尝试写代码交作业,献丑了

2 Likes

向量和标量的区别,前者是1维的,后者是0

sum之后,轴数就少了一个,两个不同轴数的张量,无法相除

1 Like

回答下第8题:
对于一个矩阵$A=[{a_1}^T,{a_2}^T,…,{a_n}^T]=[b_1,b_2,…,b_n]$
torch.norm(A,dim=0)返回的是每个列向量的范数组成的向量[torch.norm(b_1),torch.norm(b_2),…,torch.norm(b_n),]
torch.norm(A,dim=1)返回的是每个行向量的范数组成的向量[torch.norm(a_1^T),torch.norm(a_2^T),…,torch.norm(a_n^T)]
torch.norm(A)返回的是一个标量,它的值等于torch.norm(torch.norm(A,dim=0))等于torch.norm(torch.norm(A,dim=1))
推广至任意维张量D,torch.norm(D)==torch.norm(torch.norm(D,dim=0))

3 Likes

分析不对,A.sum(axis=1)后得到的张量不能用广播机制

关于第6题
运⾏A/A.sum(axis=1),看看会发⽣什么。你能分析原因吗?

从语意上,这是想对矩阵A做归一化使得每行的和为1,但会报错
A.shape: (5,4)
A.sum(axis=1).shape: (5)
shape为(5,4)和(5)的tensor之间对广播来说是不合法的,因此报错

解决办法: A/A.sum(axis=1, keepdims=True), 在(5,4)和(5,1)之间是可以广播的

顺便一提, 如果是A/A.sum(axis=0), 则无需keepdims=True也可以正常广播
即在(5,4)和(4)间也是可以广播的,不需要一定是(5,4)和(1,4)
这可以理解为一个向量总是默认将其作为行向量,当尝试广播,对齐操作对象间的shape时,默认会做右对齐,因此(5,4)和(5)进行右对齐后发现维数不匹配,广播失败,而(5,4)和(4)之间可以广播

8 Likes

抓住“右对齐”来理解广播机制是非常有好处的,判断任意tensor间是否可以广播,只需按照以下步骤就绝对不会出错了:

  1. 将两操作对象的shape做右对齐
  2. 空缺的位置假想为1
  3. 比较同一位置处各操作对象的维数,若相同或有一个为1,则可以广播,否则无法广播

例如两个tensor的shape分别为(8, 1, 6, 5)和 (7, 1, 5),那么是否可以广播呢?
做右对齐, 空缺的位置假想为1:
8, 1, 6, 5
1, 7, 1, 5
按照以上规则得出是可以广播的,操作结果的shape应为(8, 7, 6, 5)

18 Likes

参考大佬们答案,整理并做了一下,百密一疏还望指正,第二章其它做题记录放在知乎了~

13 Likes

道友好,请问知乎大名是?我去拜读一下,你总结的太棒了! :100: :100:

1 Like

知乎: 平平无奇小扑街,最近忙完保研的事情,后面会持续更新哒~