Skip to main content
 首页 » 编程设计

python之For 循环 vs Numpy 向量化计算时间

2025年05月04日20mq0036

我随机比较了显式 for 循环 与 numpy 中的矢量化实现 的计算时间。我运行了整整 100 万次迭代,发现了一些惊人的差异。 For 循环花费了大约 646 毫秒,而 np.exp() 函数在不到 20 毫秒 内计算出相同的结果。

import time 
import math 
import numpy as np 
 
iter = 1000000 
 
x = np.zeros((iter,1)) 
v = np.random.randn(iter,1) 
 
before = time.time() 
 
for i in range(iter): 
    x[i] = math.exp(v[i]) 
after = time.time() 
print(x) 
print("Non vectorized= " + str((after-before)*1000) + "ms") 
 
before = time.time() 
x = np.exp(v) 
after = time.time() 
print(x) 
print("Vectorized= " + str((after-before)*1000) + "ms") 

我得到的结果:

 [[0.9256753 ] 
 [1.2529006 ] 
 [3.47384978] 
 ... 
 [1.14945181] 
 [0.80263805] 
 [1.1938528 ]] 
Non vectorized= 646.1577415466309ms 
[[0.9256753 ] 
 [1.2529006 ] 
 [3.47384978] 
 ... 
 [1.14945181] 
 [0.80263805] 
 [1.1938528 ]] 
Vectorized= 19.547224044799805ms 

我的问题是:

  1. 第二种情况到底发生了什么?第一个是使用 一个明确的 for 循环,因此计算时间是合理的。 第二种情况的“幕后”发生了什么?
  2. 如何在不使用 numpy(在普通 Python 中)的情况下实现此类计算(第二种情况)?

请您参考如下方法:

发生的事情是 NumPy 正在调用非常擅长向量运算的高质量数值库(例如 BLAS)。

我想您可以具体调用 NumPy 使用的确切库,但是,NumPy 可能最清楚使用哪个库。