【发布时间】:2018-08-19 08:05:41
【问题描述】:
做简单的乘法似乎lambda更快;为什么?
import numpy as np
import time
def mult(x=None, y=None): return x*y
x = np.random.rand(10000,10000)
f = lambda z, g: z*g
start = []
end = []
for i in xrange(100):
start.append(time.time())
x*5
end.append(time.time())
start = np.array(start)
end = np.array(end)
print np.sum(end-start)/len(end)
start = []
end = []
for i in xrange(100):
start.append(time.time())
f(x, 5)
end.append(time.time())
start = np.array(start)
end = np.array(end)
print np.sum(end-start)/len(end)
start = []
end = []
for i in xrange(100):
start.append(time.time())
mult(x, 5)
end.append(time.time())
start = np.array(start)
end = np.array(end)
print np.sum(end-start)/len(end)
我明白了:
0.487183141708
0.482636857033
0.483230319023
【问题讨论】:
-
您应该使用
timeit对您的代码进行基准测试:docs.python.org/3/library/timeit.html -
您应该使用docs.python.org/3/library/timeit.html 来衡量性能,然后粘贴差异。
-
我得到
x * 5454 ms ± 4.86 ms per loop、f(x, 5)472 ms ± 17.3 ms per loop 和mult(f, 5)458 毫秒 ± 5 毫秒/循环... -
这些差异在统计上并不显着
-
因此,在一台特定的机器上,以特定的顺序运行一次,
lambda的时间比其他两次略小。这并不能很好地证明lambda更快。我建议运行几次,并改变脚本中执行三个计时的顺序。然后,您可以进行统计测试,以发现您看到的任何差异是否显着。如果lambda在数百次运行中始终更快,无论排序如何,那么可能有一些值得研究的地方。
标签: python function numpy lambda