公司动态
NumPy 数组 vs PyTorch Tensor
一、核心区别对比特性NumPy 数组 (numpy.ndarray)PyTorch Tensor (torch.Tensor)诞生背景传统科学计算、数据分析深度学习、神经网络运行设备只能在 CPU上运行既能在 CPU也能在 GPU/NPU上加速运行自动求导❌ 不支持需要自己写反向传播公式✅支持自动求导AutoGrad典型生态Pandas, SciPy, Matplotlib, Scikit-learnPyTorch, Hugging Face, OpenMMLab一句话总结NumPy 是 CPU 上的普通计算工具Tensor 是专为深度学习设计的硬件加速 自动求导版“超级 NumPy”。 二、具体长什么样子我们来看一下它们在 Python 里的代码表现和实际输出1. 它们长得有多像创建与打印importnumpyasnpimporttorch# 创建一个 2x3 的 NumPy 数组arrnp.array([[1.0,2.0,3.0],[4.0,5.0,6.0]])# 创建一个 2x3 的 PyTorch Tensortensortorch.tensor([[1.0,2.0,3.0],[4.0,5.0,6.0]])print(--- 1. 打印外观 ---)print(NumPy 数组:\n,arr)print(\nPyTorch Tensor:\n,tensor)运行输出长这样--- 1. 打印外观 --- NumPy 数组: [[1. 2. 3.] [4. 5. 6.]] PyTorch Tensor: tensor([[1., 2., 3.], [4., 5., 6.]])(可以看到Tensor 打印出来时外面会多一个tensor(...)的包裹标记。)2. 区别一能否放到 GPU 上跑这是深度学习模型训练速度相差成百上千倍的关键原因。# NumPy 数组只能呆在 CPU 里无法移到 GPU# arr.to(cuda) # ❌ 报错NumPy 没有这个方法# PyTorch Tensor可以随时切换到 GPUiftorch.cuda.is_available():tensor_gputensor.to(cuda)# 移到 GPU 上运行print(\nGPU 上的 Tensor:\n,tensor_gpu)3. 区别二自动求导深度学习的核心NumPy 只负责算数值而 Tensor 可以记录计算过程并自动算导数梯度。# 让 tensor 能够追踪梯度requires_gradTruextorch.tensor([3.0],requires_gradTrue)# 定义一个函数 y x^2 5yx**25# 自动进行反向传播求导 dy/dx 2xy.backward()print(x 的导数 (dy/dx):,x.grad)# 当 x3 时2*3 6运行输出x 的导数 (dy/dx): tensor([6.])(如果用 NumPy你就必须自己手动推导y′2xy 2xy′2x并写代码计算。) 三、它们之间怎么互相转换在日常开发中比如使用torch.utils.data.Dataset我们经常需要让它们相互转换1. NumPy 转换为 Tensor# 方法 Atorch.from_numpy() —— 共享内存效率最高arrnp.array([1,2,3])tensor_atorch.from_numpy(arr)# 方法 Btorch.tensor() —— 复制一份新的数据tensor_btorch.tensor(arr)2. Tensor 转换为 NumPy# 直接调用 .numpy() 即可tensortorch.tensor([1.0,2.0,3.0])arrtensor.numpy()# ⚠️ 注意如果在 GPU 上或者开启了求导需要先切断关联并移回 CPU# arr tensor.detach().cpu().numpy()做传统数据处理、绘图时用NumPy比如读取 CSV 文本、用 Matplotlib 画图。喂给神经网络模型训练时必须用PyTorch Tensor因为模型需要 GPU 加速和更新权重参数。