作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119424611
目录
2.3 通过函数的参数指明张量的维度,通过函数名指明张量的内容
(8)内容为随机数的张量 - 正态分布随机数: normal()
(9)内容为随机数的张量 - 随机打乱一个数字序列:randperm()
(10)内容是线性、均匀分布的张量 - 指定范围与步长:range()
(11)内容是线性、均匀分布的张量 - 指定范围与元素个数:linspace()
第3部分 PyTorch Tensor与Numpy Array的相互转换的实例
3.1 Numpy Array转成PyTorch Tensor:from_numpy()
3.2 PyTorch Tensor转成Numpy Array:numpy()
第1部分 前置条件
1.1 导入库及检查版本
import numpy as np
import torch
1.2 Hello World
print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())
第2部分 创建普通Tensor实例的代码示例
2.1 通过函数参数的参数(多维数组)指明张量的维度和内容
(1)Tensor([ ])
# 通过多维数组构建numpy array
a = np.array([[1,2], [3,4]])
print(a)
print(a.shape)
输出:
[[1 2]
[3 4]]
(2, 2)
#直接构建Tensor内容和维度,内容数据是确定的
a = torch.Tensor([[1,2], [3,4]])
print(a)
print(a.shape) #tensor的维度
2.2 通过函数参数指明张量的维度,内容不确定
(1)Tensor(x,y....)
# torch.Tensor:
# 所有的参数都是维度参数
a = torch.Tensor(2,3) #指定Tensor的维度参数,内容数据是不确定的
print(a)
print(a.type())
print(a.shape)
a = torch.Tensor(2,3,5) #指定Tensor的维度参数,内容数据是不确定的
print(a)
print(a.type())
print(a.shape)
tensor([[4.4157e-05, 2.1864e+23, 2.1769e+23],
[1.0325e-08, 1.0315e-08, 2.1762e-04]])
torch.FloatTensor
torch.Size([2, 3])
tensor([[[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[0.0000e+00, 0.0000e+00, 0.0000e+00, 1.4013e-45, 0.0000e+00],
[8.4078e-45, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]],
[[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[1.4013e-45, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]]])
torch.FloatTensor
torch.Size([2, 3, 5])
2.3 通过函数的参数指明张量的维度,通过函数名指明张量的内容
(1)内容为空(不确定值)的张量: empty()
#内容为空(不填充值,值不确定)
a = torch.empty(2, 3)
print(a)
print(a.type())
print(a.shape)
print("\n")
a = torch.empty(2, 3, 5)
print(a)
print(a.type())
print(a.shape)
tensor([[1.4013e-45, 8.4078e-45, 1.4013e-45],
[8.4078e-45, 9.1844e-41, 1.0748e-42]])
torch.FloatTensor
torch.Size([2, 3])
tensor([[[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[0.0000e+00, 0.0000e+00, 1.4013e-45, 0.0000e+00, 0.0000e+00]],
[[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00],
[0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 1.4013e-45],
[0.0000e+00, 9.1845e-41, 1.0748e-42, 1.4013e-45, 1.4013e-45]]])
torch.FloatTensor
torch.Size([2, 3, 5])
(2)内容为全0的张量: zeros()
# 内容为全0, 形状维度来自于参数
a = torch.zeros(2,3)
print(a)
print(a.type())
print(a.shape)
print("\n")
a = torch.zeros(2,3,5)
print(a)
print(a.type())
print(a.shape)
#输出:
tensor([[0., 0., 0.],
[0., 0., 0.]])
torch.FloatTensor
torch.Size([2, 3])
tensor([[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]])
torch.FloatTensor
torch.Size([2, 3, 5])
(3)内容为全0的张量: zeros_like()
# 内容为全0,形状维度来自其他张量
b = torch.ones(2,3)
print(b)
print("\n")
a = torch.zeros_like(b)
print(a)
print(a.type())
tensor([[1., 1., 1.],
[1., 1., 1.]])
tensor([[0., 0., 0.],
[0., 0., 0.]])
torch.FloatTensor
(4)内容为全1的张量: ones()
# 内容为全1,维度来自参数
a = torch.ones(2,3)
print(a)
print(a.type())
print(a.shape)
print("\n")
a = torch.ones(2,3,5)
print(a)
print(a.type())
print(a.shape)
输出:
tensor([[1., 1., 1.],
[1., 1., 1.]])
torch.FloatTensor
torch.Size([2, 3])
tensor([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]],
[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
torch.FloatTensor
torch.Size([2, 3, 5])
(5)内容为全1的张量: ones_like()
# 内容为全1,维度来自其他张量
b = torch.zeros(2,3)
print(b)
print("\n")
a = torch.ones_like(b)
print(a)
print(a.type())
#输出:
tensor([[0., 0., 0.],
[0., 0., 0.]])
tensor([[1., 1., 1.],
[1., 1., 1.]])
torch.FloatTensor
(6)填充任意值:full((x,y),value)
(x,y)为维度,value为填充的数值
a = torch.full((2,3),5)
print(a)
输出:
tensor([[5, 5, 5],
[5, 5, 5]])
(7)内容为随机数的张量- 均匀分布随机数:rand()
#内容为随机数
a = torch.rand(6)
print(a)
a = torch.rand(2,3)
print(a)
print(a.type())
print(a.shape)
#输出:
tensor([0.5125, 0.9256, 0.3287, 0.2118, 0.0471, 0.4917])
tensor([[0.7103, 0.0490, 0.7401],
[0.7260, 0.2599, 0.9681]])
torch.FloatTensor
torch.Size([2, 3])
(8)内容为随机数的张量 - 正态分布随机数: normal()
#mean: 均值
#std: 标准差
a = torch.normal(mean=0.0, std=torch.rand(5))
print(a)
print(a.type())
print(a.shape)
#输出:
tensor([ 0.4378, -0.0869, -0.1054, 0.1447, 0.2430])
torch.FloatTensor
torch.Size([5])
(9)内容为随机数的张量 - 随机打乱一个数字序列:randperm()
#随机打乱一个数字序列。其内的参数决定了随机数的范围
a = torch.randperm(11)
print(a)
print(a.type())
print(a.shape)
输出:
tensor([ 0, 9, 1, 5, 10, 2, 4, 6, 3, 8, 7])
torch.LongTensor
torch.Size([11])
(10)内容是线性、均匀分布的张量 - 指定范围与步长:range()
# range(m,n,step)
# 产生从[0,n]的一个等间距序列,包括n,这与Python不同。
# 第1个参数为起点,
# 第2个参数为终点,
# 第3个参数为步长,默认为1
a = torch.range(0,9)
print(a)
a = torch.range(0,9,2)
print(a)
print(a.type())
输出:
tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
tensor([0., 2., 4., 6., 8.])
torch.FloatTensor
(11)内容是线性、均匀分布的张量 - 指定范围与元素个数:linspace()
# linspace(m,n,z)
# 产生从[0,n]的一个等间距数字序列,包括n,这与Python不同。
# 第1个参数为起点,默认为0。
# 第2个参数为步长,默认为1
a = torch.linspace(0,9,10) #等间距均匀分布的序列: 最后一个参数为序列的个数
print(a)
print(a.type())
输出:
tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
torch.FloatTensor
第3部分 PyTorch Tensor与Numpy Array的相互转换的实例
3.1 Numpy Array转成PyTorch Tensor:from_numpy()
a = np.array([[1,2,3 ], [4,5,6]])
print("****************")
print(a)
print(a.size)
print(a.shape)
#把numpy数组转换成torch张量
b = torch.from_numpy(a)
#原先的numpy数组不变
print("****************")
print(a)
print(a.size)
print(a.shape)
#生成一个新的torch张量
print("****************")
print(b)
print(b.size())
print(b.shape)
输出结果:
****************
[[1 2 3]
[4 5 6]]
6
(2, 3)
****************
[[1 2 3]
[4 5 6]]
6
(2, 3)
****************
tensor([[1, 2, 3],
[4, 5, 6]], dtype=torch.int32)
torch.Size([2, 3])
torch.Size([2, 3])
3.2 PyTorch Tensor转成Numpy Array:numpy()
#把tensor转换成numpy array
c = b.numpy()
print("****************")
print(b)
print(b.size())
print(b.shape)
print("****************")
print(c)
print(c.size)
print(c.shape)
输出结果
****************
tensor([[1, 2, 3],
[4, 5, 6]], dtype=torch.int32)
torch.Size([2, 3])
torch.Size([2, 3])
****************
[[1 2 3]
[4 5 6]]
6
(2, 3)
作者主页(文火冰糖的硅基工坊):https://blog.csdn.net/HiWangWenBing
本文网址:https://blog.csdn.net/HiWangWenBing/article/details/119424611