前言
n维数组也称张量tensor。深度学习框架的张量类与Numpy计算包的ndarray相类似,但张量可以使用GPU加速计算且支持自动微分,这些功能使得张量类更适合深度学习。
创建张量
我们可以使用arrange创建一个行向量x。这个行向量包括以0开始的前12个整数,它们被默认创建为整数,也可以指定创建类型为浮点数。
x=torch.arange(12,dtype=torch.float)
x:tensor([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.])
有时我们想要使用全零、全一、其他常量或者从特定分布中随机采样的数字来初始化矩阵。
MATRIX_zero=torch.zeros((2,3,4))
MATRIX_one=torch.ones((2,3,4))
MATRIX_two=torch.full((2,3,4),2)
MATRIX_random=torch.randn(3,4) #元素从均值为0,标准差为1的标准高斯分布中随机采样
MATRIX_random_2=torch.normal(mean=1,std=1,size=(3,4))
MATRIX_random_3=torch.rand(size=(3,4)) #从[0,1)的均匀分布中随机抽取
MATRIX_zero: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.]]])
MATRIX_one: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.]]])
MATRIX_two:tensor([[[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2]],
[[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2]]])
MATRIX_random:tensor([[-0.6329, 0.9121, -0.8829, 0.0817],
[ 0.4015, -0.1040, -0.7375, 0.9182],
[ 0.0959, 3.3503, 1.8304, -1.0459]])
MATRIX_random_2:tensor([[ 1.1447, -0.1803, -0.1195, 2.1452],
[ 0.9514, 2.1825, 0.3038, -0.6018],
[ 2.0543, 0.0853, 1.4329, 3.0322]]) MATRIX_random_3:tensor([[0.5312, 0.1384, 0.0153, 0.9869],
[0.2743, 0.3762, 0.6180, 0.1179],
[0.2767, 0.5959, 0.4207, 0.4297]])
属性访问
可以通过张量的shape属性来访问张量(沿每个轴的长度)的形状;也可以获得张量中元素的总数,即形状的所有元素的乘积。
print(f'x的形状(每个轴的长度):{x.shape}')
print(f'x的元素总数:{x.numel()}')
x的形状(每个轴的长度):torch.Size([12])
x的元素总数:12
形状改变
要改变一个张量的形状而不改变元素数量和元素值,可以调用reshape函数。
X=x.reshape(3,4)
print(f'X:{X}')
print(f'X的形状(每个轴的长度):{X.shape}')
print(f'X的元素总数:{X.numel()}')
X:tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.]])
X的形状(每个轴的长度):torch.Size([3, 4])
X的元素总数:12