(3)张量和NumPy数据相互转换
Pytorch提供了Numpy数组合Pytorch张量相互转换的函数,非常方便对张量进行相关操作,如将张量转化为Numpy数组,在通过Numpy数组进行相关计算后,可以再次转化为张量,一遍进行张量相关的计算。
将Numpy数组转化为Pytorch张量,可以使用torch.as_tensor()函数和torch.from_numpy()函数,例如:
从上面的代码中得到的张量是64位浮点型数据,这是因为使用numpy生成的数组默认就是64位浮点型数组。 这是因为使用Numpy生成的数组默认就是64位浮点型数组。
针对Pytorch中的张量,使用torch.numpy()函数即可转化为Numpy数组。
(4)随机数生成张量
在pytorch中还可以通过相关随机数来生成张量,并且可以指定生成随机数的分布函数等。在生成随机数之前,可以使用torch.manual_seed()函数,指定生成随机数的种子,用于保证生成的随机数是可重复出现的。如使用torch.normal()生成服从正态(0,1)分布的随机数:
在torch.normal()函数中 ,通过mean参数指定随机数的均值,std参数指定随机数的标准差,如果mean参数和std参数都只会有一个元素这会生成一个随机数;如果mean参数和std参数有多个值,这可以生成多个随机数,例如:
上面的例子中,每个随机数服从的分布均值都是0,但是他们分布的标准差则分别是1,2,3,4.当然也可以分别制定每个随机数服从的均值, 例如:
上面的例子中,每个随机数服从的分布均值分别是1,2,3,4,分布的标准差也分别为1,2,3,4.
也可以使用torch.rand()函数,在区间[0,1]上生成服从均匀分布的张量:
而torch.rand_like函数,这可根据其他张量维度,生成预期维度相同的随机数张量,例如:
使用torch.randn()和torch.randn_like()函数则可生成服从标准正态分布的随机数张量,例如:
使用torch.randperm(n)函数,这可将0~n(包含0不包含n)之间的整数进行随机排序后输出,例如:将0~9这10个数字重新随机排序后输出,可使用如下程序:
(5)其它生成张量的函数
在pytorch中包含和np.arrange()用法相似的函数torch.arange(),常常用来生成张量,例如:
在torch.arange()中,参数start指定开始,参数end指定结束,参数step这指定步长。可食用torch.linepace()函数在范围内生成固定数量的等间隔张量,例如:
torch.logspace()函数则可生成以对数为间隔的张量,例如:
输出结果和10**(torch.linespace(start=0.1,end=1,steps=5))等价。同时pytorch中还包含很多预定义的函数,用于生成特定的张量。如下所示
函数 |
描述 |
torch.zeros(3,3) |
3*3的全零张量 |
torch.ones(3,3) |
3*3的全1张量 |
torch.eye(3) |
3*3的单位向量 |
torch.full((3,3),fill_value=0.25) |
3*3使用0.25填充的张量 |
torch.empty(3,3) |
3*3的空张量 |