PyTorch数据操作

导入torch

import torch

张量(Tensor)表示由一个数值组成的数组,这个数组可能具有多个维度,具有一个维度的数组是向量(vector),具有两个维度的数组是矩阵(matrix)…
arange创建一个行向量x
shape属性输出张量的形状
numel()张量中元素的个数

x = torch.arange(12)
print(x)
print(x.shape)
print(x.numel())
tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
torch.Size([12])
12

reshape改变张量的形状而不改变元素数量和元素值,可以通过-1调用自动计算维度的功能

x = torch.reshape(x,(3,4))
print(x)

x = torch.reshape(x,(-1,4))
print(x)

x = x.reshape(3,-1)
print(x)

x = torch.reshape(x,(3,-1))
print(x)
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])

torch.ones()输出全1张量
torch.zeros()输出全0张量
torch.randn()输出随机张量

print(torch.ones(1,3,4))
print(torch.zeros(1,3,4))
print(torch.randn(1,3,4))
tensor([[[1., 1., 1., 1.],
         [1., 1., 1., 1.],
         [1., 1., 1., 1.]]])
tensor([[[0., 0., 0., 0.],
         [0., 0., 0., 0.],
         [0., 0., 0., 0.]]])
tensor([[[-0.7862, -0.3767,  1.6115, -0.5491],
         [-1.2660,  1.5431,  2.0035,  1.0536],
         [-0.9297, -1.4365, -0.1826, -0.2816]]])

自定义张量,最外层列表对应于轴0,内层的列表对应于轴1

print(torch.tensor([[1,2,3,4],[5,6,7,8],[9,0,1,2]]))
tensor([[1, 2, 3, 4],
        [5, 6, 7, 8],
        [9, 0, 1, 2]])

对任意具有相同形状的张量,常见的标准算数运算符(+、-、、/、**)都可升级为暗元素运算

x = torch.tensor([1.0,2,4,8])
y = torch.tensor([2,2,2,2])

print(x+y)
print(x-y)
print(x*y)
print(x/y)
print(x**y)
print(torch.exp(x))

tensor([ 3.,  4.,  6., 10.])
tensor([-1.,  0.,  2.,  6.])
tensor([ 2.,  4.,  8., 16.])
tensor([0.5000, 1.0000, 2.0000, 4.0000])
tensor([ 1.,  4., 16., 64.])
tensor([2.7183e+00, 7.3891e+00, 5.4598e+01, 2.9810e+03])

张量连结

x = torch.arange(12,dtype=torch.float32).reshape((3,4))
y = torch.tensor([[2.0,1,4,3],[1,2,3,4],[1,1,1,1]])
print(torch.cat((x,y),dim=0))
print(torch.cat((x,y),dim=1))

tensor([[ 0.,  1.,  2.,  3.],
        [ 4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11.],
        [ 2.,  1.,  4.,  3.],
        [ 1.,  2.,  3.,  4.],
        [ 1.,  1.,  1.,  1.]])
tensor([[ 0.,  1.,  2.,  3.,  2.,  1.,  4.,  3.],
        [ 4.,  5.,  6.,  7.,  1.,  2.,  3.,  4.],
        [ 8.,  9., 10., 11.,  1.,  1.,  1.,  1.]])

对张量中的所有元素求和,会产生一个单元素张量

x = torch.arange(12,dtype=torch.float32).reshape((3,4))
print(x.sum())
tensor(66.)

张量的广播机制:在某些情况下,张量形状不同,通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状,之后对生成的数组执行按元素操作。

x = torch.arange(3).reshape(3,1)
y = torch.arange(2).reshape(1,2)
print(x)
print(y)
print(x + y)

tensor([[0],
        [1],
        [2]])
tensor([[0, 1]])
tensor([[0, 1],
        [1, 2],
        [2, 3]])

张量中的元素可以通过索引访问,第一个元素的索引是0,最后一个元素的索引是-1,可以指定一定范围内的元素。

x = torch.arange(12).reshape(3,4)
print(x)
print(x[-1])   #最后一行元素
print(x[0])    #第一行元素
print(x[1:3])  #第二到三行元素
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
tensor([ 8,  9, 10, 11])
tensor([0, 1, 2, 3])
tensor([[ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])

修改指定的元素值

x = torch.arange(12).reshape(3,4)
print(x)
x[1,2] = 0
print(x)
x[0:2,:] = 12  #访问第一行和第二行,:代表沿轴1(列)的所有元素
print(x)

tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  0,  7],
        [ 8,  9, 10, 11]])
tensor([[12, 12, 12, 12],
        [12, 12, 12, 12],
        [ 8,  9, 10, 11]])

将大小为1的张量转换为Python标量,调用item()函数

x = torch.tensor([2.2],dtype=torch.float32)
print(x)
print(x.item())
print(float(x))
print(int(x))
tensor([2.2000])
2.200000047683716
2.200000047683716
2

张量的条件语句按元素比较

x = torch.arange(12).reshape(3,4)
y = torch.ones(3,4)
print(x)
print(y)
print(x == y)
print(x > y)
print(x < y)
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])
tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]])
tensor([[False,  True, False, False],
        [False, False, False, False],
        [False, False, False, False]])
tensor([[False, False,  True,  True],
        [ True,  True,  True,  True],
        [ True,  True,  True,  True]])
tensor([[ True, False, False, False],
        [False, False, False, False],
        [False, False, False, False]])

上一篇:写给程序员的机器学习入门 (二) - pytorch 与矩阵计算入门


下一篇:Pytorch使用 —— Tensor