【问题标题】:Python: Why is `lambda` faster than a function or multiplication?Python:为什么`lambda`比函数或乘法更快?
【发布时间】: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 * 5 454 ms ± 4.86 ms per loopf(x, 5) 472 ms ± 17.3 ms per loopmult(f, 5) 458 毫秒 ± 5 毫秒/循环...
  • 这些差异在统计上并不显着
  • 因此,在一台特定的机器上,以特定的顺序运行一次,lambda 的时间比其他两次略小。这并不能很好地证明lambda 更快。我建议运行几次,并改变脚本中执行三个计时的顺序。然后,您可以进行统计测试,以发现您看到的任何差异是否显着。如果 lambda 在数百次运行中始终更快,无论排序如何,那么可能有一些值得研究的地方。

标签: python function numpy lambda


【解决方案1】:

使用timeit模块:

import numpy as np

def mult(x=None, y=None):
    return x*y
x = np.random.rand(1000, 1000)
f = lambda z, g: z*g


if __name__ == '__main__':
    import timeit
    setup_str = "from __main__ import x, f, mult"
    print(timeit.timeit('x*5', number=100, setup=setup_str))
    print(timeit.timeit('f(x, 5)', number=100, setup=setup_str))
    print(timeit.timeit('mult(x, 5)', number=100, setup=setup_str))

输出

0.3345440280099865

0.42724098000326194

0.3455269880068954

【讨论】:

  • 似乎 lambda 最慢。
猜你喜欢
  • 2013-12-16
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 2012-05-13
  • 2013-03-22
  • 2018-01-04
相关资源
最近更新 更多