首页 > 解决方案 > 分配已知值而不是计算它们?

问题描述

如果我正在创建一个对数据集进行一些复杂计算的程序,并且我已经知道其中一些值应该是什么,我还应该计算它们吗?例如,如果我知道 0 或 1 总是它们自己,我应该只检查值是 0 还是 1 还是实际进行计算?

编辑:

我没有代码,因为我是作为一个概念来问的。我正在创建一个程序来返回数据集中每个数字的以 10 为底的日志,我想知道返回我已经知道的值是否更有效,比如 0 代表 1,“未定义”代表 0,以及零的数量对于可被 10 整除的数字。我不确定它是否更有效,以及它是否会在更大范围内有效。

标签: python

解决方案


让我们试试这个简单的例子

$ python3 -m timeit -s "from math import log; mylog=lambda x: log(x)" "mylog(1)"
10000000 loops, best of 3: 0.152 usec per loop
$ python3 -m timeit -s "from math import log; mylog=lambda x: 0.0 if x==1 else log(x)" "mylog(1)"
10000000 loops, best of 3: 0.0976 usec per loop

但是,因此有一些加速。所有非特殊情况运行速度较慢

$ python3 -m timeit -s "from math import log; mylog=lambda x: log(x)" "mylog(2)"
10000000 loops, best of 3: 0.164 usec per loop
$ python3 -m timeit -s "from math import log; mylog=lambda x: 0.0 if x==1 else log(x)" "mylog(2)"
1000000 loops, best of 3: 0.176 usec per loop

在这种情况下,最好完全不使用包装函数

$ python3 -m timeit -s "from math import log" "log(2)"
10000000 loops, best of 3: 0.0804 usec per loop

推荐阅读