python – 数字接近1的Numpy日志慢?

看下面这段代码:

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位),带有numpy 1.11.1.

到目前为止,这已经在我身边的其他3台机器上重现了(2个Python 3.4 Anaconda安装,1个Python 2.7默认的Ubuntu安装).

其他一些用户也可以重现它,而其他用户则不能.看评论.

编辑2:

可能只在Linux系统上可重现.到目前为止,在Windows系统上无法重现.

最佳答案 在撰写本文时,大多数芯片组使用泰勒级数和特定预先计算的值表来评估日志.

对于泰勒级数,一个接近1的数字收敛的速度比远离1的数字慢.这可能在某种程度上解释了这里观察到的执行时间的差异.

0.99也可能更接近列表值之一,这也会有所帮助.

或者您的观察结果甚至可能无统计学意义.

点赞