栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

五、线性代数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

五、线性代数

# 学习时间:2022/2/22 16:19
#1、标量
import torch
x=torch.tensor([3.0])
y=torch.tensor([2.0])
print(x+y,x*y,x/y,x**y)

#2.向量:可以将其视为标量组成的列表
x=torch.arange(4)
print(x)
#可以通过索引访问任意元素
print(x[3])
#访问张量的长度
print(len(x))
#只有一个轴的张量,形状只有一个元素
print(x.shape)
#通过指定分量m,n来创建一个形状为m*n的矩阵
A=torch.arange(20).reshape(5,4)
print(A)
'''
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])
'''
print((A.T))
'''
tensor([[ 0,  4,  8, 12, 16],
        [ 1,  5,  9, 13, 17],
        [ 2,  6, 10, 14, 18],
        [ 3,  7, 11, 15, 19]])
'''
#对称矩阵
B=torch.tensor([[1,2,3],[2,0,4],[3,4,5]])
print(B==B.T)
'''
tensor([[True, True, True],
        [True, True, True],
        [True, True, True]])
'''
#向量是标量的推广,矩阵是向量的推广,可以构造更多轴的数据结构
x=torch.arange(24).reshape(2,3,4)
print(x)
'''
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]]])
'''
#给定具有形状的任何两个张量,任何按元素二元运算的结果将是相同的形状的张量
A=torch.arange(20,dtype=torch.float32).reshape(5,4)
B=A.clone()#通过分配新内存,将A的副本分配给B
print(A,A+B)
print(A*B)#两个矩阵的按元素乘法称为 哈达玛积

a=2
X=torch.arange(24).reshape(2,3,4)
print(a+X,(a*X).shape)
#计算元素和
x=torch.arange(4,dtype=torch.float32)
print(x,x.sum())
#表示任意形状张量的元素和
A=torch.arange(20*2).reshape(2,5,4)
print(A.shape,A.sum())
#指定求和和汇总张量的轴
A_sum_axis0=A.sum(axis=0)#对第一个维度求和
print(A)
print(A_sum_axis0,A_sum_axis0.shape)
'''
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])
'''
A_sum_axis1=A.sum(axis=1)
print(A_sum_axis1,A_sum_axis1.shape)#对第二个维度(指定的行求和)
'''
tensor([[ 40,  45,  50,  55],
        [140, 145, 150, 155]]) torch.Size([2, 4])
'''
print(A.sum(axis=[0,1]))#对两个维度进行求和
'''
tensor([180, 190, 200, 210])
'''
#一个于求和相关的量是平均值(mean or average)
A=torch.arange(20,dtype=torch.float32).reshape(5,4)
print(A.mean(),A.sum()/A.numel())
print(A.mean(axis=0),A.sum(axis=0)/A.shape[0])
#计算总和或均值时保持轴数不变
sum_A=A.sum(axis=1,keepdims=True)
print(sum_A)
'''
tensor([[ 6.],
        [22.],
        [38.],
        [54.],
        [70.]])
'''
print(A/sum_A)#运用广播机制
'''
tensor([[0.0000, 0.1667, 0.3333, 0.5000],
        [0.1818, 0.2273, 0.2727, 0.3182],
        [0.2105, 0.2368, 0.2632, 0.2895],
        [0.2222, 0.2407, 0.2593, 0.2778],
        [0.2286, 0.2429, 0.2571, 0.2714]])
'''
print(A.cumsum(axis=0))

#点积是相同位置的按元素乘积的和
x=torch.arange(4,dtype=torch.float32)
y=torch.ones(4,dtype=torch.float32)
print(x,y,torch.dot(x,y))
#可以通过执行按元素乘法,然后进行求和表示两个向量的点积
print(torch.sum(x*y))

#矩阵(m*n)向量(n)的积为一个m的列向量
print(A.shape,x.shape,torch.mv(A,x))
#两个矩阵A(n*m)B(m*r),可以看作执行m次矩阵-向量积,并进行拼接,形成n*r
B=torch.ones(4,3)
print(torch.mm(A,B))
#L2范数是向量元素平方和的平方根
u=torch.tensor([3.0,4.0])
print(torch.norm(u))
'''
tensor(5.)
'''
#L1范数是向量绝对值和
print(torch.abs(u).sum())
'''
tensor(7.)
'''
#矩阵的弗罗贝尼乌斯范数(Frobenius norm)是矩阵元素的平方和的平方根
print(torch.norm(torch.ones(4,9)))
'''
tensor(6.)
'''

#问题回答
'''
1、数值变得稀疏
2、深度学习为什么用张量表示?统计学利用张量进行表示
3、copy和clone的区别?copy不一定赋值内存(浅层copy和深层copy),clone一定是赋值内存
4、torch不区分行向量和列向量吗?(一维张量一定是行向量,列向量是一个矩阵(n,1))
5、稀疏化之后有什么好的解决办法?稀疏矩阵方法?减少内存?
'''

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号