# 3.pytorch的入门使用

## 3.1 张量Tensor

• 0阶张量:标量、常数，0-D Tensor
• 1阶张量:向量,1-D Tensor
• 2阶张量:矩阵，2-D Tensor
• 3阶张量
• 5…
• N阶张量

## 3.2 在Pytorch中创建张量

1.使用python中的列表或者序列创建张量

``````import torch
import numpy as np
t1=torch.tensor([[1, -1], [1, -1]])
print(t1)
``````

2.使用Numpy中的数组创建张量

``````t2 = torch.tensor(np.array([[1, 2, 3], [4, 5, 6]]))
print(t2)
``````

3.使用torch中的api创建tensor

``````t3_0 = torch.empty(3, 4)  # 创建3行4列的空tensor，会用无用数据去填充
t3_1 = torch.ones([3, 4])  # 创建3行4列全为1的tensor
t3_2 = torch.zeros([3, 4])  # 创建3行4列全为0的tensor
t3_3 = torch.rand([3, 4])  # 创建3行4列随机值的tensor，随机区间为（0,1）
t3_4 = torch.randint(low=0, high=10, size=[3, 4])  # 创建3行4列随机整数的tensor，随机区间为（low,high）
t3_5 = torch.randn([3, 4])  # 创建3行4列随机数的tensor，随机值的均值为0，方差为1
``````

## 3.3 Pytorch中的tensor常用方法

1.获取tensor中的数据(当tensor中只有一个元素可用):tensor.item()

``````t4 = torch.tensor(np.arange(1))
print(t4)
print(t4.item())
``````

2.转化为numpy数组

``````t5_1 = torch.randint(low=0, high=10, size=[3, 4])
t5_2=t5_1.numpy()
print(t5_1)
print(t5_2)
``````

3.获取形状：tensor.size()

``````t6 = torch.randint(low=0, high=10, size=[3, 4])
print(t6)
print(t6.size())
``````

4.形状改变：tensor.view((3,4))。类似numpy中的reshape，是一种浅拷贝，仅仅是形状发生改变

``````t7 = torch.randint(low=0, high=10, size=[3, 4])
print(t7)
print(t7.view(2, 6))
``````

5.获取维数:tensor.dim()

``````t8 = torch.randint(low=0, high=10, size=[3, 4])
print(t8)
print(t8.dim())
``````

6.获取最大值:tensor.max()

``````t9 = torch.randint(low=0, high=10, size=[3, 4])
print(t9)
print(t9.max())
``````

7.转置：tensor.t()

``````t10 = torch.randint(low=0, high=10, size=[3, 4])
print(t10)
print(t10.t())
``````

8.获取tensor第m行n列的值：tensor[m,n]

``````t11 = torch.randint(low=0, high=10, size=[3, 4])
print(t11)
print(t11[1, 2])  # 获取第二行第3列的值
``````

9.赋值：tensor[m,n]=x，将第m行n列的值赋值为x

``````t12 = torch.randint(low=0, high=10, size=[3, 4])
print(t12)
t12[1,2]=1000
print(t12)
``````

10.交换矩阵的两个维度:torch.transpose(x, 0, 1)

``````t13 = torch.randn(2, 3);  # 2行3列
print(t13)
t13=torch.transpose(t13, 0, 1)
print(t13)  # 将t13变为3行2列
``````

• 1：里面只有一块数据
• 2,3：代表每一块数据都是一个2行3列的数据

## 3.4 tensor的数据类型

1.获取tensor的数据类型：x.dtype

``````t15 = torch.randn([3, 4])
print(t15.dtype)
``````

2.在创建张量时，也可通过dtype来指定数据类型

``````t16 = torch.randn([3, 4],dtype=torch.double)
print(t16.dtype)
``````

``````t17 = torch.LongTensor([1, 2])
print(t17)
``````

## 3.5 tensor的其他操作

1.tensor与tensor的相加

``````t18 = t17.new_ones(5, 3, dtype=torch.float)
t18_1 = torch.randn(5, 3)
print(t18)
print(t18_1)
print(t18 + t18_1)
print(t18)
``````

2.tensor和数字操作

``````t19 = torch.randn(3, 3)
print("t19：", t19)
print("t19+10=", t19 + 10)
``````

3.CUDA中的tensor
CUDA (Compute Unified Device Architecture),是NVIDIA推出的运算平台。

CUDATM是一种由NVIDIA推出的通用并行计算架构，该架构使GPU能够解决复杂的计算问题。

torch.cuda这个模块增加了对CUDA tensor的支持，能够在cpu和gpu上使用相同的方法操作tensor

``````if torch.cuda.is_available():
device = torch.device("cuda")  # cuda device对象
y = torch.ones_like(t19, device=device)  # 创建一个cuda的tensor
x = t19.to(device)  # 使用方法把t19转化为cuda的tensor
z = x + y
print(z)
print(z.to("cpu", torch.double))  # .to方法也能够同时设置类型
else:
print("您的设备不支持gpu运算")
``````