深度学习——numpy和torch的对比

文章对比了numpy和torch两个库在数据格式和基本运算上的差异。numpy主要用于二维数据的科学计算,而torch则能处理更高维度的神经网络数据。两者间可以方便地互相转换,且都支持abs运算和矩阵相乘,但在具体实现上略有不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简述

1.numpy是python中进行科学计算的一个模块,可以进行矩阵的运算等,常用来处理二维的存储数据。
2.torch是神经网络中的用于生成和处理多维存储数据的一个模块,不仅可以生成和处理二维数据,也可以生成和处理更高维度的数据。可以将其理解为神经网络中的numpy。

二、numpy和torch的对比

1.数据格式的对比

import torch
import numpy as np

numpy_data = np.arange(6).reshape(2, 3)
print("numpy_data为:\n", numpy_data)
print("numpy_data的数据类型为", type(numpy_data))

# 将numpy的数据转化成torch的形式
torch_data = torch.from_numpy(numpy_data)
print("torch_data为:\n", torch_data)
print("torch_data的数据类型为:", type(torch_data))

# 将torch的数据转化成numpy到达形式
numpy_data_2 = torch_data.numpy()
print("numpy_data_2为:\n", numpy_data_2)
print("numpy_data_2的数据类型为:", type(numpy_data_2))

在这里插入图片描述

2.基本运算的对比

(1)abs运算
import torch
import numpy as np


data = [-1, 2, -3, 5]
# 1.先将list形式转化为ndarray形式
# 2.再讲ndarray形式转化为tensor的形式
data_tensor = torch.from_numpy(np.array(data))

# abs运算
print("numpy求绝对值", np.abs(data))
print("pytorch求绝对值", torch.abs(data_tensor))

在这里插入图片描述

(2)矩阵相乘
import torch
import numpy as np

# 矩阵相乘
numpy_data = np.arange(4).reshape(2, 2)
torch_data = torch.from_numpy(numpy_data)
print("numpy中的矩阵相乘结果为\n", np.matmul(numpy_data, numpy_data))
print("torch中的矩阵相乘结果为\n", torch.mm(torch_data, torch_data))

在这里插入图片描述

### NumpyPyTorch的功能对比及相互转换 #### 1. 功能对比 Numpy是一个用于科学计算的基础库,主要处理多维数组对象以及各种派生的对象(如掩码数组矩阵)。它提供了大量的数学函数来操作这些数组。而PyTorch则是一个深度学习框架,除了提供类似于Numpy的张量功能外,还支持GPU加速、自动求导等功能。 - **核心数据结构**: - NumPy的核心数据结构是`ndarray` (n-dimensional array),这是一个固定大小的同质化数组[^3]。 - PyTorch的核心数据结构是`Tensor`,它可以视为NumPy `ndarray` 的增强版,并且能够利用GPU进行高效计算[^5]。 - **性能差异**: - 当涉及大规模数值计算时,如果硬件条件允许,PyTorch通常会比NumPy更快,因为它可以通过CUDA接口调用GPU资源[^4]。 - 如果仅限于CPU环境,则两者的速度可能相差不大,但在某些特定场景下,由于优化的不同,可能会存在细微差距。 - **其他特性**: - 自动微分:这是PyTorch区别于NumPy的一个重要特征之一,在构建神经网络模型过程中非常有用。 - GPU支持:虽然理论上也可以借助第三方工具让NumPy运行在GPU上,但这并不是它的设计初衷;相比之下,PyTorch天生就具备良好的GPU兼容性。 #### 2. 相互转换方法 为了方便开发者在同一项目中同时使用这两个强大的工具包,官方已经实现了二者间的无缝切换——即可以从一个类型的变量轻松创建另一个类型的实例: - **从NumPyPyTorch** ```python import torch import numpy as np # 创建一个随机数构成的二维NumPy数组 np_array = np.random.rand(3, 4) # 将该NumPy数组转化为PyTorch中的Tensor pt_tensor = torch.from_numpy(np_array) print(pt_tensor) ``` 上述代码片段展示了如何通过`torch.from_numpy()`函数把现有的NumPy ndarray 转换成相应的PyTorch Tensor 实例[^1]。 需要注意的是,当执行此操作之后所得到的新对象仍然共享原始输入的数据存储空间位置,这意味着任何针对其中一个版本所做的修改都会反映到另外一个上面去除非显式复制。 - **从PyTorch回到NumPy** ```python # 假设我们已经有了某个PyTorch Tensor... some_pt_tensor = ... # ...那么就可以这样把它变回普通的NumPy Array形式: corresponding_np_array = some_pt_tensor.numpy() ``` 同样地,这里采用`.numpy()` 方法完成反向映射过程。值得注意的一点在于只有当原初的PyTorch Tensor位于CPU设备之上时才能成功调用这个API —— 否则的话就需要先迁移至那里再做进一步处理。 另外关于广播机制方面也有提及,这表明即使维度不完全匹配的情况下也能正常相加减乘除等运算。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值