d2l之线性代数

发布时间 2024-01-07 18:34:55作者: LCAC

一、降维

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的0维长度相同;

 

四、范数

正常使用的是L2范数即:sqrt(a^2 + b^2 + ... + x^2)

u = torch.tensor([3.0, -4.0])
print(torch.norm(u)) # tensor(5.)

如上是简单的范数,结果是:tensor(5.)