楼主: shadowaver
380 0

[网帖精选] 从 NumPy 到 PyTorch:不仅是数值计算的进阶 [推广有奖]

随心所欲不逾矩

已卖:1243份资源

教授

56%

还不是VIP/贵宾

-

威望
0
论坛币
8309 个
通用积分
689.8825
学术水平
18 点
热心指数
22 点
信用等级
13 点
经验
29709 点
帖子
890
精华
0
在线时间
1368 小时
注册时间
2007-9-27
最后登录
2026-1-4

楼主
shadowaver 在职认证  发表于 2025-7-30 15:26:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

概述

是什么

深度学习和科学计算领域,NumPyPyTorch 是两个非常重要的 Python 库。NumPy 是 Python 科学计算的基础包,专注于高效的数组操作。PyTorch 则是在 NumPy 基础上进一步发展,加入了自动求导和 GPU 支持

,使其成为神经网络

构建的理想工具。


为什么

虽然 NumPy 强大,但它无法满足现代深度学习的关键需求:

缺乏自动求导机制

  • NumPy 无法追踪计算图,不能进行反向传播。
  • PyTorch 提供 autograd
  • ,自动记录操作并计算梯度。

无法利用 GPU 加速

  • NumPy 运算只能在 CPU 上执行,效率较低。
  • PyTorch 可将张量转移到 GPU,大幅加速模型训练。

无法构建神经网络模型

  • PyTorch 提供了丰富的神经网络模块
  • 例如 torch.nn.Module,使构建、训练、优化神经网络变得简单高效。

NumPy 与 PyTorch 的对比

特性NumPyPyTorch
核心用途通用科学计算,矩阵操作深度学习框架,兼具张量计算与自动求导功能
核心对象ndarraytensor
自动求导❌ 不支持✅ 支持 autograd 自动反向传播
GPU 支持❌ 仅支持 CPU✅ 支持 GPU 加速
深度学习API❌ 无✅ 有 (torch.nn, torch.optim, torchvision 等)

怎么做

通过示例对比PyTorch 与 NumPy

功能NumPyPyTorch
数据类型ndarray,支持CPU计算Tensor,支持CPU和GPU计算,支持自动求导
构造器array, zeros, ones, arange, linspace等tensor, zeros, ones, arange, linspace等
形状变换reshape, transpose等reshape, transpose等
索引切片、布尔索引、整数索引等切片、布尔索引、整数索引等
数值计算dot, sum, mean等matmul, sum, mean等,支持自动求导
示例对比

PyTorch和NumPy都提供了强大的工具和功能来操作数组和矩阵。为了帮助你更好地理解二者在常见操作上的异同,我们将根据以下几个方面进行对比:类型、构造器、形状变换、数据选择、数值计算等。这里的对比不仅帮助理解它们的API差异,也展示了PyTorch在深度学习中的优势。

1. 类型(Types)

NumPy的核心类型是ndarray,它代表了一个多维数组,可以通过不同的数据类型(如int, float, complex等)来存储各种类型的数据。

PyTorch的核心类型是Tensor,它与NumPy的ndarray类似,但PyTorch的Tensor支持GPU加速,并且可以通过GPU(CUDA

)运算。PyTorch还支持自动求导,是深度学习计算的核心类型。

import numpy as npA = np.array([1, 2, 3], dtype=np.float32)  # 指定数据类型print(A)import torchA = torch.tensor([1, 2, 3], dtype=torch.float32)  # 指定数据类型print(A)
2. 构造器(Constructor)

NumPy提供了多个构造函数来创建数组:

# 零和一 (zeros, ones): 创建全零或全一的数组。np.zeros((3, 3))  # 创建3x3的零矩阵 # 从已知数据构造 (array): 从Python列表、元组等创建NumPy数组。np.array([1, 2, 3])  # 数值范围 (arange, linspace): 创建指定范围的数组。np.arange(0, 10, 2)  # 创建[0, 2, 4, 6, 8]  np.linspace(0, 1, 5)  # 创建[0.0, 0.25, 0.5, 0.75, 1.0]

PyTorch也提供了类似的构造器来创建Tensor:

# 零和一 (zeros, ones): 创建全零或全一的张量。torch.zeros((3, 3))  # 创建3x3的零矩阵 # 从已知数据构造 (tensor): 从Python列表、NumPy数组等创建Tensor。torch.tensor([1, 2, 3])  # 数值范围 (arange, linspace): 创建指定范围的张量。torch.arange(0, 10, 2)  # 创建[0, 2, 4, 6, 8] torch.linspace(0, 1, 5)  # 创建[0.0, 0.25, 0.5, 0.75, 1.0]
3. 形状(Shape)变换

NumPy提供了很多方法来改变数组的形状:

# reshape:改变数组的形状。A = np.array([1, 2, 3, 4, 5, 6]) A_reshaped = A.reshape((2, 3))  # transpose:转置数组。A_transposed = A.reshape((2, 3)).T  

PyTorch同样提供了形状变换方法:

# reshape:改变张量的形状。A = torch.tensor([1, 2, 3, 4, 5, 6]) A_reshaped = A.reshape((2, 3)) # transpose:转置张量。A_transposed = A.reshape((2, 3)).T  
4. 数据选择(Indexing)

NumPy支持基于整数、切片、布尔索引等多种方式进行数组元素选择。

A = np.array([1, 2, 3, 4, 5])A[1:3]  # 切片A[A > 3]  # 布尔索引

PyTorch同样支持类似的索引方式。

A = torch.tensor([1, 2, 3, 4, 5])A[1:3]  # 切片A[A > 3]  # 布尔索引
5. 数值计算(Numerical Computation)

NumPy包含了大量的数学函数,用于进行数值计算,如线性代数运算、数学函数等。

np.dot(A, B)  # 矩阵乘法np.sum(A)  # 求和np.mean(A)  # 求均值

PyTorch不仅提供了类似的数学函数,还具有自动求导功能,适用于深度学习中的梯度计算。


torch.matmul(A, B)  # 矩阵乘法torch.sum(A)  # 求和torch.mean(A)  # 求均值

PyTorch在处理深度学习任务时,可以通过Autograd自动计算梯度。

A = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)B = torch.tensor([4.0, 5.0, 6.0], requires_grad=True)C = A + BC.backward()  # 自动求导

6. 向量和矩阵点积
  • 向量点积和乘积
  • 矩阵点积和乘积

1向量点积和乘积

代码实现

########################################################## Python手动实现、NumPy和PyTorch调库实现:向量点击和乘积########################################################import numpy as npimport torch# Python手动实现、NumPy和PyTorch调库实现# 点积(Dot Product)# 对于两个向量 a 和 b,它们的点积是两个向量对应位置元素的乘积之和# 对于两个向量 a 和 b,它们的内积是一个标量,即这两个向量的点积。def dot_product(a, b):    return sum(i * j for i, j in zip(a, b))def dot_product_np(a, b):    return np.dot(a, b)def dot_product_torch(a, b):    return torch.dot(torch.tensor(a), torch.tensor(b))# 乘积(Element-wise Product)# 两个向量中对应位置的元素相乘,得到一个新的向量。def elementwise_product(a, b):    return [i * j for i, j in zip(a, b)]def elementwise_product_np(a, b):    return np.multiply(a, b)def elementwise_product_torch(a, b):    return torch.mul(torch.tensor(a), torch.tensor(b))# 测试数据vec_a = [1, 2, 3]vec_b = [4, 5, 6]# 调用函数并打印结果print("Dot Product:")print(dot_product(vec_a, vec_b))print(dot_product_np(vec_a, vec_b))print(dot_product_torch(vec_a, vec_b).item())print("\nElement-wise Product:")print(elementwise_product(vec_a, vec_b))print(elementwise_product_np(vec_a, vec_b))print(elementwise_product_torch(vec_a, vec_b))

2矩阵点积和乘积

代码实现

########################################################## Python手动实现、NumPy和PyTorch调库实现:矩阵点积和乘积########################################################import numpy as npimport torch# 矩阵的点积(Matrix Dot Product)# 两个矩阵 A 和 B 的点积是通过对 A 的行和 B 的列进行内积运算得到的新矩阵。def matrix_dot_product(A, B):    result = []    for i in range(len(A)):        row = []        for j in range(len(B[0])):            sum = 0            for k in range(len(B)):                sum += A[k] * B[k][j]            row.append(sum)        result.append(row)    return resultdef matrix_dot_product_np(A, B):    return np.dot(A, B)def matrix_dot_product_torch(A, B):    return torch.matmul(torch.tensor(A), torch.tensor(B)).tolist()# 矩阵的乘积(Element-wise Matrix Product)# 两个矩阵中对应位置的元素相乘,得到一个新的矩阵。def elementwise_matrix_product(A, B):    return [[A[j] * B[j] for j in range(len(A[0]))] for i in range(len(A))]def elementwise_matrix_product_np(A, B):    return np.multiply(A, B)def elementwise_matrix_product_torch(A, B):    return torch.mul(torch.tensor(A), torch.tensor(B)).tolist()# 测试数据matrix_A = [[1, 2],             [3, 4]]matrix_B = [[5, 6],             [7, 8]]# 调用函数并打印结果print("Matrix Dot Product:")print(matrix_dot_product(matrix_A, matrix_B))print(matrix_dot_product_np(matrix_A, matrix_B))print(matrix_dot_product_torch(matrix_A, matrix_B))print("\nElement-wise Matrix Product:")print(elementwise_matrix_product(matrix_A, matrix_B))print(elementwise_matrix_product_np(matrix_A, matrix_B))print(elementwise_matrix_product_torch(matrix_A, matrix_B))

总结与参考

总结

  • NumPy主要用于高效的数值计算,广泛应用于科学计算和数据处理。它适合于中小型数据集以及需要高效数组操作的任务。
  • PyTorch除了拥有NumPy的基本功能外,还增加了自动求导和GPU加速,特别适用于深度学习领域。在需要大规模数据计算或

参考

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Numpy 数值计算 RCH NUM Computation NumPy PyTorch:不仅是数值计算的进阶

shadowaver@163.com
QQ 540722048

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-5 09:59