AI因你而升温,记得加个星标哦!
import torch
torch.__version__
# '1.7.0'复制
1 特殊张量的创建
与numpy
类似,PyTorch
中的张量也有很多特殊创建的形式。
zeros
:全0张量
# 形状为2行3列
torch.zeros([2, 3])
# tensor([[0., 0., 0.],
# [0., 0., 0.]])复制
ones
:全1张量
# 形状为2行3列
torch.ones([2, 3])
# tensor([[1., 1., 1.],
# [1., 1., 1.]])复制
eye
:单位矩阵
torch.eye(3)
# tensor([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])复制
diag
:对角矩阵
在PyTorch中,需要利用一维张量去创建对角矩阵。
torch.diag(torch.tensor([1,2,3,4,5]))
# tensor([[1, 0, 0, 0, 0],
# [0, 2, 0, 0, 0],
# [0, 0, 3, 0, 0],
# [0, 0, 0, 4, 0],
# [0, 0, 0, 0, 5]])复制
rand
:服从0-1均匀分布的张量
torch.rand(2, 3)
# tensor([[0.2154, 0.7666, 0.7396],
# [0.3063, 0.9024, 0.0047]])复制
randn
:服从标准正态分布的张量
torch.randn(3, 3)
# tensor([[ 1.2200, -1.0587, 1.0716],
# [-1.2465, -0.3391, 1.2131],
# [ 0.7201, 1.2034, -1.0660]])复制
normal
服从指定正态分布的张量
# 均值为2,标准差为3的张量,形状为2行2列
torch.normal(2, 3, size = (2, 2))
# tensor([[9.0815, 0.9216],
# [0.9856, 4.2866]])复制
randint
整数随机采用
torch.randint(1, 10, size = [2, 4])
# tensor([[1, 8, 2, 3],
# [5, 3, 5, 7]])复制
arange/linspace
:生成数列
# 从1-5,左闭右开
torch.arange(5)
# tensor([0, 1, 2, 3, 4])
# 从1-5,左右都包含,等距取3个数
torch.linspace(1, 5, 3)
# tensor([1., 3., 5.])复制
empty
:生成未初始化的指定形状矩阵
它生成的数近似于0,但不为0
torch.empty(2, 3)
# tensor([[-2.1193e-17, 4.5602e-41, 3.0720e-09],
# [ 3.0630e-41, 0.0000e+00, 0.0000e+00]])复制
full
:根据指定形状,填充指定数值
# 填充形状为2行4列,填充数值为2
torch.full([2, 4], 2)
# tensor([[2, 2, 2, 2],
# [2, 2, 2, 2]])复制
2 _like
后缀的用法
创建指定形状的数组,在上述函数后面加上_like
即可。比如现在我们有一个张量t
,形状为2行3列:
t = torch.tensor([[1, 2, 3], [4, 5, 6]])
复制
我们想创建一个1-100随机数的张量,形状与张量t
相同:
torch.randint_like(t, 1, 100)
# tensor([[57, 67, 77],
# [76, 45, 31]])复制
上述函数都有_like
方法,需要注意的是该方法转化需要注意转化前后数据类型一致的问题,若数据类型不一致,则会报错:
# randn为float型,而t为int型
# 转换数据类型不一致,就会报错
torch.randn_like(t)
# RuntimeError复制
3 张量与其他数据类型的转换
张量、数组和列表是较为相似的三种类型对象,在实际操作过程中,经常会涉及三种对象的相互转化。
3.1 .numpy()/np.array()
:张量转化为数组
# 使用.numpy()
t.numpy()
# array([1, 2, 3])
# 使用np.array()
np.array(t)
# array([1, 2, 3])复制
3.2 tolist()/list()
:张量转化为列表
# 使用tolist()
t = torch.tensor([1, 2, 3])
t.tolist()
# [1, 2, 3]复制
需要注意的是,在使用list()时,此时转化的列表是由一个个零维张量构成的列表,而非张量的数值构成的列表。可理解为1维张量是由0维张量组成的。
# 使用list(),结果是零维张量构成的列表,为标量
list(t)
# [tensor(1), tensor(2), tensor(3)]复制
3.3 .item()
:标量转化为数值
在很多情况下,我们需要将最终计算的结果张量转为单独的数值进行输出。
n = torch.tensor(1)
print(n)
# tensor(1)
# 使用.item()方法将标量转为python中的数值
n.item()
# 1复制
4 张量的深拷贝
与python中其他对象类型一样,等号赋值操作实际上是浅拷贝,需要进行深拷贝,则需要使用clone方法。
4.1 浅拷贝
t1 = torch.arange(10)
t2 = t1
t2[1] = 10
print(t1)
# t1也被改变了
# tensor([ 0, 10, 2, 3, 4, 5, 6, 7, 8, 9])
print(t2)
# tensor([ 0, 10, 2, 3, 4, 5, 6, 7, 8, 9])复制
4.2 clone()
深拷贝
t1 = torch.arange(10)
t2 = t1.clone()
t2[1] = 10
# t1并没有被改变
print(t1)
# tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# t2的第二个元素变成了10
print(t2)
# tensor([ 0, 10, 2, 3, 4, 5, 6, 7, 8, 9])复制
文章转载自AI有温度,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
2280次阅读
2025-04-09 15:33:27
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
1046次阅读
2025-04-27 16:53:22
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
657次阅读
2025-04-10 15:35:48
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
527次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
508次阅读
2025-04-14 09:40:20
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
466次阅读
2025-04-07 09:44:54
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
420次阅读
2025-04-17 17:02:24
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
399次阅读
2025-04-30 15:24:06
天津市政府数据库框采结果公布,7家数据库产品入选!
通讯员
396次阅读
2025-04-10 12:32:35
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
346次阅读
2025-04-18 10:01:22