线性代数基础知识
矩阵的每一行元素
分别和`列的每行元素相乘再相加
按照列做乘法 矩阵被扭曲
矩阵A的范数 :其所有元素的平方和再开根号
特征向量是不被矩阵改变方向的向量
线性代数实现
向量是标量值组成的列表
这里是3行4列2片
如果只B=A 不会重新分配内存 只是把A的索引给B 这样B动A也会动
import torch
a = 2
x = torch.arange(24,dtype=torch.float32).reshape(2,3,4)
# print(a+x)
# print(a*x)
A = torch.arange(40).reshape(2,5,4)
print(A)# 2块5行4列 外0内1 所以依次是轴0,1,2
print('TTT\n',A.sum())
print('000\n',A.sum(axis=0),A.sum(axis=0).shape)
# 轴0,两片中的元素对应相加变一片 变5*4
print('111\n',A.sum(axis=1),A.sum(axis=1).shape)
# 轴1, 加的方向按行移动,行变化,每5行的中的元素对应相加变一行 变2*4
print('222\n',A.sum(axis=2),A.sum(axis=2).shape)
# 轴2,加的方向按列移动,列变化,每4列的中的元素对应相加变一列 变2*5
'''
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],
[24, 25, 26, 27],
[28, 29, 30, 31],
[32, 33, 34, 35],
[36, 37, 38, 39]]])
TTT
tensor(780)
000
tensor([[20, 22, 24, 26],
[28, 30, 32, 34],
[36, 38, 40, 42],
[44, 46, 48, 50],
[52, 54, 56, 58]]) torch.Size([5, 4])
111
tensor([[ 40, 45, 50, 55],
[140, 145, 150, 155]]) torch.Size([2, 4])
111
tensor([[ 6, 22, 38, 54, 70],
[ 86, 102, 118, 134, 150]]) torch.Size([2, 5])
'''
print('0101\n',A.sum([0,1]),A.sum([0,1]).shape)# 轴0,1 按照矩阵来求 变1*4 即4
向量的点积 torch.dot(x*y)
等价于按元素相乘再求和即torch.sum(x*y)
A = torch.arange(20).reshape(5,4)
x = torch.arange(4).reshape(4)
print(A)
print(x)
# A与列向量x相乘 相当于A的每行元素与x中的每个元素相乘再相加
print(torch.mv(A, x))
矩阵乘法
A = torch.arange(20).reshape(5, 4)
B = torch.arange(12).reshape(4, 3)
print(A)
print(B)
print(torch.mm(A, B))
'''
tensor([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]])
tensor([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
tensor([[ 42, 48, 54],
[114, 136, 158],
[186, 224, 262],
[258, 312, 366],
[330, 400, 470]])
'''
范数
按轴求和
二维中
axis=0 沿着行变化
的方向移动相加 按行相加 shape 去掉axis0,去掉5
axis=1 沿着列变化
的方向移动相加 按列相加 shape 去掉axis1,去掉4
三维
keepdims=True
torch 不区分行向量和列向量吗?
ps 机器学习中的张量其实是矩阵
一维张量一定是行向量
列向量一定是个矩阵(二维)
如果要区分行列向量要用矩阵区别
但是对计算机来说 向量就是一个一维数组