[英]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.