PyTorch中的Tensor 是核心数据结构,类似于 NumPy 的多维数组,但具备 GPU 加速和自动求导等深度学习特性。
一、基本概念
-  
核心数据结构
- Tensor 是存储和操作数据的基础单元,支持标量(0D)、向量(1D)、矩阵(2D)及更高维数组。
 - 与 NumPy 的 
ndarray类似,但支持动态计算图和自动梯度计算。 
 -  
关键特性
- GPU 加速:可存储在 CPU 或 GPU 中,GPU 计算显著提升性能。
 - 自动求导:通过 
requires_grad=True启用梯度计算,支持反向传播。 
 
二、创建方式
-  
直接创建
- 从 Python 列表或元组初始化: 
a = torch.tensor([1, 2, 3]) # 1D Tensor(向量) b = torch.tensor([[1.0, 2.0], [3.0, 4.0]]) # 2D Tensor(矩阵) - 指定数据类型(如 
dtype=torch.float32)和设备(如device='cuda')。 
 - 从 Python 列表或元组初始化: 
 -  
初始化方法
- 全零/全一张量: 
zeros_tensor = torch.zeros((2, 3)) # 2x3 全零张量 ones_tensor = torch.ones((2, 3)) # 2x3 全一张量 - 随机张量: 
rand_tensor = torch.rand((2, 3)) # 值在 [0,1) 的均匀分布 
 - 全零/全一张量: 
 -  
从其他数据结构转换
- 从 NumPy 数组转换: 
使用
torch.from_numpy(),Tensor 与 NumPy 数组共享内存(修改一方会影响另一方)numpy_arr = np.array([1, 2, 3]) tensor = torch.from_numpy(numpy_arr) # 共享内存使用
torch.tensor()复制数据,生成独立 Tensor:tensor = torch.tensor(numpy_arr) # 不共享内存 - 从图片转换:
使用 torchvision.transforms
将 NumPy 格式的图片(HWC 格式,值域 [0, 255])转换为 Tensor(CHW 格式,值域 [0.0, 1.0]):from PIL import Image from torchvision import transformsimg = Image.open("image.jpg") # PIL.Image 对象 (H,W,C) tensor_trans = transforms.ToTensor() tensor_img = tensor_trans(img) # 转为 Tensor (C, H, W) 
 - 从 NumPy 数组转换: 
 
三、维度与形状
-  
常见维度类型
- 0D 张量:标量(如 
torch.tensor(5))。 - 1D 张量:向量(如时间序列数据)。
 - 2D 张量:矩阵(如表格数据)。
 - 3D 张量:多通道图像(形状 
(C, H, W))。 - 4D 张量:批量图像(形状 
(N, C, H, W),N为批量大小)。 - 5D 张量:视频或体积数据(如医疗图像)。
 
 - 0D 张量:标量(如 
 -  
形状操作
- 调整形状:
reshape()或view()(需保证元素总数不变)。 - 转置:
tensor.T或transpose()。 
 - 调整形状:
 
四、运算与操作
-  
数学运算
- 逐元素运算(如 
+,*,torch.sin())。 - 矩阵乘法:
torch.matmul()或@运算符。 
 - 逐元素运算(如 
 -  
索引与切片
- 类似 NumPy 的索引方式: 
tensor = torch.rand(3, 4) row = tensor[0, :] # 第一行 column = tensor[:, 1] # 第二列 
 - 类似 NumPy 的索引方式: 
 -  
自动求导
- 启用梯度跟踪: 
x = torch.tensor(2.0, requires_grad=True) y = x**2 y.backward() # 计算梯度 print(x.grad) # 输出 4.0 
 - 启用梯度跟踪: 
 
五、其他特性
-  
数据类型
- 支持多种类型(如 
torch.float32、torch.int64),可通过dtype参数指定。 - 通过 .float()、.int() 等方法改变 Tensor 的数据类型。 
tensor = torch.tensor([1, 2]).float() # 转为 float32 
 - 支持多种类型(如 
 -  
设备切换
- 使用 
.to('cuda')或.cpu()在 CPU 和 GPU 间移动张量。tensor_cpu = torch.tensor([1, 2]) tensor_gpu = tensor_cpu.to("cuda") # 转为 GPU Tensor 
 - 使用