python - 分配已知值而不是计算它们?
问题描述
如果我正在创建一个对数据集进行一些复杂计算的程序,并且我已经知道其中一些值应该是什么,我还应该计算它们吗?例如,如果我知道 0 或 1 总是它们自己,我应该只检查值是 0 还是 1 还是实际进行计算?
编辑:
我没有代码,因为我是作为一个概念来问的。我正在创建一个程序来返回数据集中每个数字的以 10 为底的日志,我想知道返回我已经知道的值是否更有效,比如 0 代表 1,“未定义”代表 0,以及零的数量对于可被 10 整除的数字。我不确定它是否更有效,以及它是否会在更大范围内有效。
解决方案
让我们试试这个简单的例子
$ 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
推荐阅读
- r - 包 geomorph 不读取负值
- vba - 在工作表中生成超链接,链接到在不同工作表中找到的匹配数据
- c++ - 在 C++ 中为 struct(union) 创建构造函数
- .net - SSRS 2008 和 System.Drawing FileIOPermissions
- angular - 找不到“object”类型的不同支持对象“[object Object]”。角火2
- javascript - 比较 Javascript 数组对象并返回最接近的对
- vuejs2 - Vue中如何为导入的组件添加点击功能
- batch-file - Rename a list of files in Windows CMD
- haskell - IO 操作是否可以在将逻辑保持在纯函数中的同时进行排序?
- d3.js - 将带有值的状态标签和工具提示添加到 D3 美国地图