数字接近1的Numpy日志慢?

时间:2016-09-20 14:56:10

标签: python numpy runtime

查看以下代码:

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系统上无法重现。

1 个答案:

答案 0 :(得分:1)

在撰写本文时,大多数芯片组使用泰勒级数与特定预先计算的值表进行评估log

使用泰勒级数,接近1的数字比收敛的数字慢于远离1的数字。这可能在某种程度上解释了此处观察到的执行时间的差异。

0.99也可能更接近其中一个列表值,这也会有所帮助。

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