NumPy 数组 vs PyTorch Tensor

🔍 一、核心区别对比

特性 NumPy 数组 (numpy.ndarray) PyTorch Tensor (torch.Tensor)
诞生背景 传统科学计算、数据分析 深度学习、神经网络
运行设备 只能在 CPU 上运行 既能在 CPU,也能在 GPU/NPU 上加速运行
自动求导 ❌ 不支持(需要自己写反向传播公式) ✅ 支持自动求导(AutoGrad)
典型生态 Pandas, SciPy, Matplotlib, Scikit-learn PyTorch, Hugging Face, OpenMMLab

一句话总结 :

NumPy 是 CPU 上的普通计算工具 ;Tensor 是专为深度学习设计的硬件加速 + 自动求导版"超级 NumPy"。


💻 二、具体长什么样子?

我们来看一下它们在 Python 里的代码表现和实际输出:

1. 它们长得有多像?(创建与打印)

python 复制代码
import numpy as np
import torch

# 创建一个 2x3 的 NumPy 数组
arr = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])

# 创建一个 2x3 的 PyTorch Tensor
tensor = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])

print("--- 1. 打印外观 ---")
print("NumPy 数组:\n", arr)
print("\nPyTorch Tensor:\n", tensor)

运行输出长这样:

text 复制代码
--- 1. 打印外观 ---
NumPy 数组:
 [[1. 2. 3.]
  [4. 5. 6.]]

PyTorch Tensor:
 tensor([[1., 2., 3.],
        [4., 5., 6.]])

(可以看到,Tensor 打印出来时外面会多一个 tensor(...) 的包裹标记。)


2. 区别一:能否放到 GPU 上跑?

这是深度学习模型训练速度相差成百上千倍的关键原因。

python 复制代码
# NumPy 数组:只能呆在 CPU 里,无法移到 GPU
# arr.to('cuda')  # ❌ 报错!NumPy 没有这个方法

# PyTorch Tensor:可以随时切换到 GPU
if torch.cuda.is_available():
    tensor_gpu = tensor.to("cuda")  # 🚀 移到 GPU 上运行
    print("\nGPU 上的 Tensor:\n", tensor_gpu)

3. 区别二:自动求导(深度学习的核心)

NumPy 只负责算数值;而 Tensor 可以记录计算过程并自动算导数(梯度)。

python 复制代码
# 让 tensor 能够追踪梯度(requires_grad=True)
x = torch.tensor([3.0], requires_grad=True)

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

# 自动进行反向传播(求导 dy/dx = 2x)
y.backward()

print("x 的导数 (dy/dx):", x.grad)  # 当 x=3 时,2*3 = 6

运行输出:

text 复制代码
x 的导数 (dy/dx): tensor([6.])

(如果用 NumPy,你就必须自己手动推导 y′=2xy' = 2xy′=2x 并写代码计算。)


🔄 三、它们之间怎么互相转换?

在日常开发中(比如使用 torch.utils.data.Dataset),我们经常需要让它们相互转换:

1. NumPy 转换为 Tensor

python 复制代码
# 方法 A:torch.from_numpy() ------ 共享内存,效率最高
arr = np.array([1, 2, 3])
tensor_a = torch.from_numpy(arr)

# 方法 B:torch.tensor() ------ 复制一份新的数据
tensor_b = torch.tensor(arr)

2. Tensor 转换为 NumPy

python 复制代码
# 直接调用 .numpy() 即可
tensor = torch.tensor([1.0, 2.0, 3.0])
arr = tensor.numpy()

# ⚠️ 注意:如果在 GPU 上,或者开启了求导,需要先切断关联并移回 CPU
# arr = tensor.detach().cpu().numpy()

  1. 做传统数据处理、绘图时 :用 NumPy(比如读取 CSV 文本、用 Matplotlib 画图)。
  2. 喂给神经网络模型训练时 :必须用 PyTorch Tensor(因为模型需要 GPU 加速和更新权重参数)。
相关推荐
全栈探索者3 分钟前
模型去哪下、放哪里、怎么选:Mac 玩 ComfyUI 的模型管理全图景(附我的实盘清单)
人工智能·macos·aigc·stablediffusion·comfyui
天远Date Lab7 分钟前
零信任架构实战:基于天远车型识别普通构建自动化二手车认证参数建档网关
人工智能·1024程序员节
天远数科8 分钟前
零信任架构实战:基于天远车型识别普通构建自动化汽车消费信贷车辆精细款型校验网关
人工智能·1024程序员节·工具分享
szxinmai主板定制专家10 分钟前
ARM 还是 x86?CODESYS 数控机床控制器选型、FPGA 取舍与实时性真相
arm开发·人工智能·fpga开发·zynq·1024程序员节·codesys
Godspeed Zhao1 小时前
具身智能系统概论——边缘计算和云端协调
人工智能·边缘计算·1024程序员节
u1301301 小时前
GitHub 热榜项目:日榜(2026-10-24)
人工智能·github·1024程序员节
悟天特斯1 小时前
边缘计算的“智能下沉“:从本地处理到边缘AI的推理加速
人工智能·边缘计算
sbjdhjd1 小时前
从黑板事实到长链路剪枝:AI 渗透测试 Agent 的实验、失效与改造
人工智能·网络安全·数据挖掘·php·agent·剪枝·1024程序员节
灵动的艺术7 小时前
如一 Agent 架构解读(二十四):Agent 高效率低成本思考
人工智能·agent·如一
Xxtaoaooo8 小时前
双11避坑:我用 WorkBuddy + TextIn xParse 做了个「避坑对比台」,商品详情图丢进去,参数矛盾自动现形
人工智能·1024程序员节·textin·workbuddy·ai数据层基础设施