使用numpy.mean列出比numpy.array慢得多

时间:2019-05-05 06:27:34

标签: numpy

我认为将Numpy方法直接应用于Python列表显然很慢。我认为它变慢的原因是因为Numpy方法(例如numpy.mean)会在计算均值之前将列表转换为数组。但是尝试下面的代码后,的情况是:将列表转换为数组的时间+数组的numpy的时间==列表的numpy的时间。谁能解释为什么?

import numpy as np
from time import time

r = [i for i in range(1000000)]

start_list = time()
np.mean(r)
end_list = time() - start_list

start_array = time()
np.mean(np.array(r))
end_array = time() - start_array
  

第一个:0.060173988342285156

     

第二个:0.05114173889160156

1 个答案:

答案 0 :(得分:1)

仅在观看挂钟时间后才运行代码不是衡量其速度的最佳方法,因为结果可能会随机且不可预测地受到其他进程的影响。您应该运行几次(越多越好)并取平均值。 Python为此目的专门设计了一个名为timeit的模块。例如。在我的机器上,我得到以下结果:

from timeit import timeit

setup = """import numpy as np
r = list(range(1000000))"""
n = 100
print(timeit("np.mean(r)", setup=setup, number=n))
print(timeit("np.mean(np.array(r))", setup=setup, number=n))

输出:

4.940829735947773
4.928034849930555

或使用相应的IPython magic

import numpy as np
r = list(range(1000000))
%timeit np.mean(r)
%timeit np.mean(np.array(r))

输出:

49.4 ms ± 189 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
49.5 ms ± 202 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

这意味着执行时间没有显着差异。

我使用Windows 10,Python 3.7.3和numpy 1.16.2。