繁体   English   中英

List vs Numpy数组计算速度:for循环

[英]List vs Numpy array computing speed: for loops

我想知道在 python 中追加到列表是否会比填充“空”numpy 数组更快或更慢。 我知道 numpy 是直接用 C 语言编写的,因此我希望它比在 python 中构建函数更快。 我写了一个代码来看看是否确实如此。 然而,我发现填充列表比 np 数组更快。 我为更大的 n 测试了这段代码,以便能够忽略加载到 numpy 库中的影响。 有谁知道为什么会这样? 谢谢!

代码:

import time 
import numpy as np 
import matplotlib.pyplot as plt 

n = 10000000

t_np_0= time.perf_counter()
f = np.empty(n)
for i in range(n):
    f[i] = i

t_np_1 = time.perf_counter()
print("Time elapsed numpy: ", t_np_1 - t_np_0) 

t_list_0= time.perf_counter()
f = []
for i in range(n):
     f.append(i)

t_list_1 = time.perf_counter()
print("Time elapsed list: ", t_list_1 - t_list_0) 

speed = (t_np_1 - t_np_0)/(t_list_1 - t_list_0)
print("np is " + str((speed - 1)*100) + "% slower than list")

首先,您使用列表的附加方法和 NumPy 数组的填充方法。

但是,您也可以对列表使用填充方法。

list = []
for i in range(n):
    list.append(i)
list = [None] * n
for i in range(n):
    list[i] = [i]

最快的方法是这样的:

list = list(range(n))

其次,使用 NumPy 创建列表(数组)会更慢,因为它使用外部 Python 库 NumPy。

但是,如果您想使用您创建的列表进行任何计算,使用 NumPy 可能会更快。

import numpy as np

n = 1000000

data_np = np.arange(n)
data_list = list(range(n))

%timeit -n 10 -r 7 data_np / n
> 3.91 ms ± 392 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit -n 10 -r 7 [i / n for i in data_list]
> 81 ms ± 1.52 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM