特殊张量的创建方法

全零、单位、对角、正态分布、随机采样、arange数列等张量
创建一些特殊取值的张量,用于模拟特殊取值的矩阵,如全0矩阵、对角矩阵等
(1)torch.zeros()方法,创建全零张量

1#创建全零张量
torch.zeros([2, 3])
结果为:tensor([[0., 0., 0.],
			    [0., 0., 0.]])

由于zeros就已经确定了张量元素的取值,因此该函数传入的参数实际上是决定了张量的形状。

(2)torch.eye()方法,创建单位张量

#创建单位张量
torch.eye(5)
结果为:tensor([[1., 0., 0., 0., 0.],
                [0., 1., 0., 0., 0.],
                [0., 0., 1., 0., 0.],
                [0., 0., 0., 1., 0.],
                [0., 0., 0., 0., 1.]])

(3)torch.diag()方法,创建对角矩阵:只有对角线上有非0元素的矩阵称为对角矩阵
注意:在pytorch中,需要利用一维张量去创建对角矩阵,不能使用list直接创建对角矩阵。

#创建对角矩阵
t = torch.tensor([1, 2, 3, 4])
torch.diag(t)
结果为:tensor([[1, 0, 0, 0],
                [0, 2, 0, 0],
                [0, 0, 3, 0],
                [0, 0, 0, 4]])

(4)torch.rand()方法:创建服从0-1均匀分布的张量

#创建服从0-1均匀分布的张量
torch.rand(2, 3)
结果为:tensor([[0.9881, 0.5235, 0.6702],
                [0.1762, 0.8337, 0.1581]])

(5)torch.randn()方法:创建服从标准正态分布的张量

#创建服从标准正态分布的张量
torch.randn(2, 3)
结果为:tensor([[ 1.9555, -0.4252, -0.2817],
                [-0.3945,  1.1989, -0.0206]])

(6)torch.normal()方法:创建服从指定正态分布的张量

#创建服从指定正态分布的张量
torch.normal(2, 3, size = (2, 2))#均值为2标准差为3的张量
结果为:tensor([[ 0.3686,  6.1062],
                [-0.4829,  8.1674]])

(7)torch.randint()方法:创建整数随机采样结果的张量

#创建整数随机采样结果的张量
torch.randint(1, 10, size = (2, 3))#在1-10之间随机抽取整数,组成2×3的张量
结果为:tensor([[2, 8, 8],
                [3, 9, 3]])

(8)torch.arange()/torch.linspace()方法:生成数列,产生一维张量

#和range相同
torch.arange(5) #生成在0-4之间的一维张量
结果为:tensor([0, 1, 2, 3, 4])

torch.arange(1, 5, 0.5) #在1-5之间(不包括5)的一维张量,步长为0.5
结果为:tensor([1.0000, 1.5000, 2.0000, 2.5000, 3.0000, 3.5000, 4.0000, 4.5000])

torch.linspace(1, 5, 3) #从1到5(左右都包含),等距取三个数
结果为:tensor([1., 3., 5.])

(9)torch.empty()方法:生成未初始化的指定形状矩阵

torch.empty(2, 3) #括号中放入张量指定的形状
结果为:tensor([[1.4013e-45, 0.0000e+00, 8.1621e-27],
                [8.6600e-43, 1.1868e+27, 3.4080e-41]])

(10)torch.full()方法:根据指定形状,填充指定数值

torch.full([2, 4], 2) #括号中放入张量指定的形状
结果为:tensor([[2, 2, 2, 2],
                [2, 2, 2, 2]])

(11)_like:根据指定对象的形状进行数据填充,只需要在上述函数(full函数、rand等函数都可以)后面加上_like即可

t1 = torch.tensor([1, 2])
t2 = torch.tensor([[1, 2], [3, 4]])
torch.full_like(t1, 5) #根据t1形状,填充数值5
结果为:tensor([5, 5])

torch.randint_like(t2, 1, 10) #根据t2形状,填充1-10的随机数
结果为:tensor([[9, 2],
        [8, 7]])

torch.zeros_like(t1) #根据t1形状,填充数值0
结果为:tensor([0, 0])

注意:_like类型转化需要注意转化前后数据类型一致的问题,类型不一致将会报错。
如:
请添加图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐