d2l之线性代数
一、降维
1、求和
对一个n维数组进行求和,如果指定沿哪一个轴来通过求和降低维度。如下是降低0维:
A = torch.arange(20, dtype=torch.float32).reshape(5,4) print(A) print(A.sum(axis=0)) /* tensor([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [12., 13., 14., 15.], [16., 17., 18., 19.]]) tensor([40., 45., 50., 55.]) 通过沿着第0维进行降低,也就是程序的结果保留了第一维的形状 */
当然,如果只是求A的所有元素的和,则为: A.sum() 那么结果就是tensor(190.), 也可以写为: A.sum(axis=[0,1])
2、同理,求平均值也是一样的。
A.mean(axis=0) /* tensor([ 8., 9., 10., 11.]) */
如上等同于:A.sum(axis=0) / A.shape[0]
二、非降维求和
指定某个维度进行求和、求最大值、最小值和乘积
这里以求和为例子
print(A.cumsum(axis=0)) /* tensor([[ 0., 1., 2., 3.], [ 4., 6., 8., 10.], [12., 15., 18., 21.], [24., 28., 32., 36.], [40., 45., 50., 55.]]) 这里是第0维的各个元素的和 */ print(A.cumsum(axis=1)) /* tensor([[ 0., 1., 3., 6.], [ 4., 9., 15., 22.], [ 8., 17., 27., 38.], [12., 25., 39., 54.], [16., 33., 51., 70.]]) */
求和:cumsum、求最大值:cummax、求最小值:cummin、求累积乘:cumprod
累积乘和求和的区别是将加号改为乘号
三、其他的一些操作
1、点积:torch.dot(x, y) 将x的各个元素和y的各个元素分别相乘,这里需要的是x和y的形状相同
2、矩阵-向量积:torch.mv(A, x) 这里要求A的1维和x的长度相同,并且x是一维;最终结果形状跟A一样
3、矩阵-矩阵乘法:torch.mm(A, B) :这里要求A的1维和B的0维长度相同,并且AB都是二维矩阵;最终结果形状是A的0维乘以B的一维
四、范数
正常使用的是L2范数即:sqrt(a^2 + b^2 + ... + x^2)
u = torch.tensor([3.0, -4.0]) print(torch.norm(u)) # tensor(5.)
如上是简单的范数,结果是:tensor(5.)