【AI学习——PyTorch】PyTorch张量 vs NumPy数组:区别与转换
张量是PyTorch中用于存储和处理数据的核心数据结构,是NumPy数组的 “深度学习增强版”。从维度上看:0 维张量 = 标量(如 5)1 维张量 = 向量(如 [1,2,3])2 维张量 = 矩阵(如 [[1,2],[3,4]])3 维及以上 = 高维张量(如 RGB 图片:[高度,宽度,通道数])核心价值:相比 NumPy 数组,张量专为深度学习设计,支持GPU加速、自动求导等关键功能。
一、基础环境搭建:Anaconda + PyTorch
1.1 Anaconda 安装与虚拟环境配置
(1)Anaconda 安装
-
下载地址:Anaconda 官网,选择对应系统(Windows/macOS/Linux)版本,无脑下一步安装(建议勾选 “Add Anaconda to PATH”,方便终端调用)。
-
验证安装:终端输入
conda --version,输出版本号即安装成功。
(2)虚拟环境配置(核心:隔离不同项目依赖)
# 1. 创建虚拟环境(命名为pytorch_env,指定Python版本3.9)
conda create -n pytorch_env python=3.9
# 2. 激活环境(Windows)
conda activate pytorch_env
# 激活环境(macOS/Linux)
source activate pytorch_env
# 3. 退出环境(无需使用时)
conda deactivate
# 4. 查看已创建环境
conda info --envs
1.2 PyTorch安装:CPU/GPU版本选择
(1)版本选择原则
-
CPU版本:无NVIDIA显卡、仅学习基础语法 → 安装简单,无需配置 CUDA。
-
GPU版本:有NVIDIA显卡(需满足CUDA算力要求) → 运算速度提升10倍以上,需先确认显卡驱动支持的 CUDA 版本。
(2)安装命令(激活虚拟环境后执行)
-
查看 PyTorch 官方命令:PyTorch 官网,选择对应系统 / 包管理器 / 版本。
CPU 版本(通用):
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
GPU 版本(以 CUDA 11.8 为例):
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
(3)安装验证
import torch
# 验证PyTorch是否安装成功
print(torch.__version__)
# 验证GPU是否可用(返回True则GPU版本生效)
print(torch.cuda.is_available())
二、核心基础:什么是张量(Tensor)?
可直接理解:
张量是PyTorch中用于存储和处理数据的核心数据结构,是NumPy数组的 “深度学习增强版”。
-
从维度上看:
-
0 维张量 = 标量(如 5)
-
1 维张量 = 向量(如 [1,2,3])
-
2 维张量 = 矩阵(如 [[1,2],[3,4]])
-
3 维及以上 = 高维张量(如 RGB 图片:[高度,宽度,通道数])
-
-
核心价值:相比 NumPy 数组,张量专为深度学习设计,支持GPU加速、自动求导等关键功能。
三、核心:PyTorch张量(Tensor)操作
3.1 张量与NumPy数组的核心区别
| 特性 | PyTorch张量 | NumPy数组 |
|---|---|---|
| 计算场景 | 支持GPU加速 | 仅CPU计算 |
| 自动求导 | 内置autograd机制 | 无自动求导功能 |
| 分布式计算 | 支持 | 不支持 |
| 核心用途 | 深度学习模型训练 | 数据处理、科学计算 |
3.2 张量创建(对比NumPy)
import torch
import numpy as np
# 1. 从列表创建
tensor1 = torch.tensor([1, 2, 3])
numpy1 = np.array([1, 2, 3])
# 2. 创建全0/全1张量
tensor2 = torch.zeros((2, 3)) # 2行3列全0张量
numpy2 = np.zeros((2, 3))
# 3. 创建随机张量(0-1均匀分布)
tensor3 = torch.rand((2, 3))
numpy3 = np.random.rand(2, 3)
# 4. 创建单位张量(对角为1)
tensor4 = torch.eye(3) # 3x3单位矩阵
numpy4 = np.eye(3)
3.3 张量与NumPy数组的类型转换
(1)张量 → NumPy数组
tensor = torch.tensor([1, 2, 3])
numpy_arr = tensor.numpy() # 转换后共享内存(张量修改,数组也会变)
# 不想共享内存时用这行(避免意外修改)
numpy_arr = tensor.cpu().detach().numpy()
(2)NumPy数组 → 张量
numpy_arr = np.array([1, 2, 3])
tensor = torch.from_numpy(numpy_arr) # 共享内存
# 不共享内存(更安全)
tensor = torch.tensor(numpy_arr)
3.4 张量形状操作(reshape/view/squeeze)
(1)reshape:修改形状(兼容所有场景)
tensor = torch.rand(4, 6) # 4行6列,总元素24个
# 改为3行8列
tensor_reshape = tensor.reshape(3, 8)
# 自动计算维度(-1表示自适应,新手高频用法)
tensor_reshape2 = tensor.reshape(-1, 8) # 等价于(3,8)
tensor_reshape3 = tensor.reshape(2, -1) # 等价于(2,12)
(2)view:修改形状(仅适用于连续内存的张量)
tensor = torch.rand(4, 6)
tensor_view = tensor.view(3, 8) # 功能与reshape类似,但要求张量内存连续
# 提示:优先用reshape,避免view的内存报错
(3)squeeze/unsqueeze:压缩 / 扩展维度
# squeeze:删除维度为1的轴(新手常见:去除多余维度)
tensor = torch.rand(1, 2, 1, 3) # 形状:(1,2,1,3)
tensor_squeeze = tensor.squeeze() # 压缩后:(2,3)
tensor_squeeze2 = tensor.squeeze(0) # 仅删除第0个维度:(2,1,3)
# unsqueeze:添加维度为1的轴(新手常见:适配模型输入)
tensor = torch.rand(2, 3) # 形状:(2,3)
tensor_unsqueeze = tensor.unsqueeze(1) # 添加第1个维度:(2,1,3)
四、实战对比:张量与 NumPy 数组运算
# 1. 基本运算(语法几乎一致)
tensor = torch.tensor([1, 2, 3])
numpy_arr = np.array([1, 2, 3])
print(tensor + 2) # 张量加法:tensor([3, 4, 5])
print(numpy_arr + 2) # 数组加法:[3 4 5]
# 2. GPU加速演示(张量独有的核心优势)
if torch.cuda.is_available():
tensor_gpu = tensor.to("cuda") # 张量移到GPU
print(tensor_gpu + 2) # GPU上运算,输出:tensor([3, 4, 5], device='cuda:0')
总结
-
基础认知:张量是PyTorch的核心数据结构,是支持GPU / 自动求导的 “增强版NumPy数组”,维度对应标量 / 向量 / 矩阵 / 高维数据。
-
环境搭建:Anaconda虚拟环境隔离依赖,PyTorch安装后用
torch.cuda.is_available()验证 GPU版本是否生效。 -
核心操作:张量与NumPy转换时注意内存共享问题;形状操作优先用reshape,squeeze/unsqueeze用于调整维度适配模型。
更多推荐



所有评论(0)