Python循环速度比较

时间:2016-09-29 14:21:08

标签: python performance numpy functional-programming list-comprehension

我正在做一个非常简单的编码练习来比较Python中不同方法的运行时间。

  

任务:给定一个数字列表,方形并返回每个奇数   清单。

import timeit
# 1. functional sol
s161 = '''seq = range(1,10)
result = map(lambda x: x**2, filter(lambda x: x%2 !=0, seq))'''
u161= timeit.Timer(stmt=s161, setup='import numpy as np')
print u161.timeit(number = 10000)
>>>> 0.0283808019885

# 2. list comp sol!!! twice faster than map and filter
s162='''seq = range(1,10)
result2 = [j**2 for j in seq if j %2 != 0]
'''
u162= timeit.Timer(stmt=s162, setup='import numpy as np')
print u162.timeit(number = 10000)
>>>> 0.0124025493424

# 3. numpy sol (surprisingly the slowest
s163='''seq = np.array(range(1,10))
result3 =np.square(seq[seq%2 !=0])
'''
u163= timeit.Timer(stmt=s163, setup='import numpy as np')
print u163.timeit(number = 10000)
>>>> 0.0656246913131

所以就速度而言:列表理解>功能> Numpy矢量化。我本以为numpy解决方案是最快速的,功能性的解决方案和列表理解能够达成一致。我并没有真正调用np.append(),而是应用了矢量化操作。

anlaysis是否有效?如果是这样,你能否提供一些关于为什么列表理解最快的见解,并且numpy解决方案相对非常慢?

更新

根据评论,对于seq = range(10000),比较变为:

1. Functional = 1.87310951806
2. List Comprehension = 0.941395220259
3. Numpy = 0.670276152436

Numpy如预期的那样最快。我不确定为什么列表理解比map / filter快得多。

0 个答案:

没有答案