PyTorch 的张量(Tensor)与 NumPy 的数组(Array)区别

下面我会用通俗易懂的方式,向初学者 解释 PyTorch 的张量(Tensor)NumPy 的数组(Array) 的区别,并通过代码示例帮助你理解。


🌟 一句话总结区别:

PyTorch 的张量和 NumPy 数组功能相似,但 PyTorch 张量支持 GPU 加速和自动求导(用于深度学习),而 NumPy 只能在 CPU 上运行,也不支持自动求导。


一、相似之处(先建立熟悉感)

PyTorch 的 Tensor 和 NumPy 的 ndarray 都是用来存储和操作多维数据的,比如:

  • 向量(1维)
  • 矩阵(2维)
  • 图像(3维或4维)
  • 批量数据(4维)

它们都支持:

  • 数学运算(加减乘除)
  • 广播机制
  • 索引和切片
  • 形状变换(reshape)

二、核心区别(重点来了!)

特性 NumPy 数组 (ndarray) PyTorch 张量 (Tensor)
运行设备 只能在 CPU 上运行 可以在 CPU 或 GPU 上运行
自动求导 ❌ 不支持 ✅ 支持(requires_grad=True
深度学习支持 ❌ 不适合 ✅ PyTorch 的核心数据结构
GPU 加速 ❌ 不支持 ✅ 支持(通过 .to("cuda")
与神经网络集成 ❌ 不行 ✅ 可直接用于模型训练

三、代码示例对比

我们通过几个例子来直观感受它们的异同。

✅ 示例1:创建数组/张量

python 复制代码
import numpy as np
import torch

# NumPy 创建数组
np_array = np.array([1, 2, 3])
print("NumPy array:", np_array)

# PyTorch 创建张量
pt_tensor = torch.tensor([1, 2, 3])
print("PyTorch tensor:", pt_tensor)

输出:

ini 复制代码
NumPy array: [1 2 3]
PyTorch tensor: tensor([1, 2, 3])

👉 看起来几乎一样!


✅ 示例2:数学运算(加法)

python 复制代码
# NumPy
a_np = np.array([1, 2, 3])
b_np = np.array([4, 5, 6])
c_np = a_np + b_np
print("NumPy 加法:", c_np)

# PyTorch
a_pt = torch.tensor([1, 2, 3])
b_pt = torch.tensor([4, 5, 6])
c_pt = a_pt + b_pt
print("PyTorch 加法:", c_pt)

输出:

ini 复制代码
NumPy 加法: [5 7 9]
PyTorch 加法: tensor([5, 7, 9])

👉 运算方式完全一样!


✅ 示例3:自动求导(PyTorch 特有!)

这是 PyTorch 的核心优势------可以自动计算梯度,用于训练神经网络。

python 复制代码
import torch

# 创建一个需要求导的张量
x = torch.tensor(2.0, requires_grad=True)

# 定义一个函数:y = x^2
y = x ** 2

# 自动求导(反向传播)
y.backward()

# 查看梯度 dy/dx = 2x = 4
print("梯度:", x.grad)  # 输出: tensor(4.)

👉 NumPy 做不到这一点!你得手动算导数。


✅ 示例4:GPU 加速(PyTorch 特有!)

python 复制代码
# 检查是否有 GPU
device = "cuda" if torch.cuda.is_available() else "cpu"
print("使用设备:", device)

# 创建在 GPU 上的张量
gpu_tensor = torch.tensor([1, 2, 3]).to(device)
print("GPU tensor:", gpu_tensor)

# 大矩阵运算会明显更快(如果用 GPU)
large_tensor = torch.randn(10000, 10000).to(device)
result = torch.matmul(large_tensor, large_tensor)  # 矩阵乘法

👉 NumPy 只能在 CPU 上跑,没法利用 GPU 加速。


✅ 示例5:相互转换(很方便!)

PyTorch 和 NumPy 可以轻松互相转换:

python 复制代码
# PyTorch Tensor → NumPy Array
pt = torch.tensor([1, 2, 3])
np_from_pt = pt.numpy()
print("转成 NumPy:", np_from_pt)

# NumPy Array → PyTorch Tensor
np_arr = np.array([4, 5, 6])
pt_from_np = torch.from_numpy(np_arr)
print("转成 Tensor:", pt_from_np)

⚠️ 注意事项

  1. GPU 上的 Tensor 不能直接转 NumPy

    ❌ 错误:gpu_tensor.numpy()

    ✅ 正确:gpu_tensor.cpu().numpy()

  2. requires_grad 只对浮点张量有效

    整数类型(如 int64)不能求导。

  3. PyTorch 默认类型更严格

    例如:torch.tensor([1,2,3])int64,而浮点运算常需 float32


四、总结(小白也能记住)

你想做什么? 用哪个?
学习 Python 数据处理、统计、绘图 ✅ NumPy
图像处理、CSV 数据分析 ✅ NumPy + Pandas
做深度学习、训练神经网络、用 GPU ✅ PyTorch Tensor
快速原型 + GPU 加速 + 自动求导 ✅ PyTorch
和 PyTorch 模型交互 ✅ 必须用 Tensor
从 NumPy 数据开始训练模型 torch.from_numpy(...) 转成 Tensor
把训练结果画图分析 .numpy() 转回 NumPy

🔔 小贴士:PyTorch 的设计非常像 NumPy,就是为了让你从 NumPy 过渡得更自然!


✅ 一句话送给你:

NumPy 是数据科学的基础工具,PyTorch 是深度学习的超级引擎 ------ 它们的"数组"很像,但 PyTorch 更强大,尤其适合 AI 训练。


当然可以!下面是一份专为初学者设计的「PyTorch vs NumPy」对比速查表(Cheat Sheet),简洁明了,方便你快速查阅和记忆。


🧩 PyTorch Tensor vs NumPy Array 速查表

功能 NumPy (ndarray) PyTorch (Tensor) 说明
✅ 创建数组/张量 np.array([1, 2, 3]) torch.tensor([1, 2, 3]) 用法几乎一样
✅ 创建零矩阵 np.zeros((2, 3)) torch.zeros(2, 3) 注意 PyTorch 不用双括号
✅ 创建随机数 np.random.rand(2, 3) torch.rand(2, 3) 生成 [0,1) 均匀分布
✅ 数学运算 a + b, a * b a + b, a * b 支持相同运算符
✅ 矩阵乘法 np.dot(a, b)a @ b torch.matmul(a, b)a @ b 推荐用 @
✅ 形状变换 arr.reshape(3, 4) tensor.reshape(3, 4) 用法一致
✅ 查看形状 arr.shape tensor.shapetensor.size() 一样
✅ 索引与切片 arr[0], arr[:, 1] tensor[0], tensor[:, 1] 完全兼容
🚫 自动求导 ❌ 不支持 tensor.requires_grad = True PyTorch 核心功能
🚫 GPU 加速 ❌ 仅 CPU tensor.to("cuda") PyTorch 可上 GPU
🔁 转换为对方 torch.from_numpy(np_arr) tensor.numpy() 注意:GPU tensor 需先 .cpu()
💡 数据类型指定 np.array([1,2], dtype=np.float32) torch.tensor([1,2], dtype=torch.float32) 类型名称略有不同
📦 常见类型简写 np.float32, np.int64 torch.float32, torch.int64torch.float, torch.long PyTorch 更灵活
🔄 共享内存(注意!) torch.from_numpy() 共享内存 .numpy() 与原 tensor 共享内存 修改一个会影响另一个
相关推荐
七牛云行业应用8 小时前
私有化存储架构演进:从传统NAS到一体化数据平台
大数据·人工智能·架构·云计算·七牛云存储
爱喝奶茶的企鹅8 小时前
Ethan独立开发新品速递 | 2025-09-02
人工智能·程序员
聚客AI8 小时前
🤖告别复杂粘合代码:LangGraph+OceanBase构建智能Agent蓝图
人工智能·llm·agent
爱喝奶茶的企鹅8 小时前
Ethan开发者创新项目日报 | 2025-09-02
人工智能
前端开发工程师请求出战9 小时前
从“调旋钮”到“预训练”:一文看懂AI模型的“成长史”
人工智能
Ai工具分享9 小时前
如何用AI视频增强清晰度软件解决画质模糊问题
人工智能·音视频
Ronin-Lotus9 小时前
深度学习篇---ShuffleNet
人工智能·深度学习
渐行渐远君489019 小时前
AI Agent智能体与MCP Server开发实践
前端·人工智能
瓦香钵钵鸡9 小时前
机器学习通关秘籍|Day 05:过拟合和欠拟合、正则化、岭回归、拉索回归、逻辑回归、Kmeans聚类
人工智能·机器学习·回归·逻辑回归·k-means·过拟合