查看以下代码:
import numpy as np
import timeit
print('close', timeit.Timer(lambda: np.log(0.99999999999999978)).timeit())
print('not close', timeit.Timer(lambda: np.log(0.99)).timeit()))
输出结果为:
close 4.462684076999722
not close 0.6319260000018403
如何在运行时间上产生如此大的(数量级)差异?我错过了什么吗?
编辑:
更重要的是,我们看到价值放缓幅度小到:
1 - np.finfo(np.float).eps
但不是价值观
1 - np.finfo(np.float).eps * 10
。
我的计算机Python 3.5.2 |Anaconda 4.1.1 (64-bit)
与numpy 1.11.1
。
到目前为止,这已经在我的另外3台机器上重现了(2个Python 3.4 Anaconda安装,1个Python 2.7默认的Ubuntu安装)。
其他一些用户也可以重现它,而其他用户则不能。见评论。
编辑2:
可能只能在Linux系统上重现。到目前为止,在Windows系统上无法重现。
答案 0 :(得分:1)
在撰写本文时,大多数芯片组使用泰勒级数与特定预先计算的值表进行评估log
。
使用泰勒级数,接近1的数字比收敛的数字慢于远离1的数字。这可能在某种程度上解释了此处观察到的执行时间的差异。
0.99
也可能更接近其中一个列表值,这也会有所帮助。
或者您的观察结果甚至可能无统计学意义。