为什么np.arccos(1.0)在np.arange的情况下给出nan?

时间:2014-02-27 11:30:28

标签: python numpy trigonometry

任何人都可以复制这个吗?

import numpy as np
print np.arccos(1.0)
print np.arccos(1)
for x in np.arange(0.7,1,0.05):
    print x
    print np.arccos(x)

输出:

0.0
0.0
0.7
0.795398830184
0.75
0.722734247813
0.8
0.643501108793
0.85
0.55481103298
0.9
0.451026811796
0.95
0.317560429292
1.0
nan

请注意,最后一个值np.arccos(1.0)nan。当我在控制台中np.arccos(1.0)时,0.0就像我期望的那样。是什么导致了这种行为?

注意,我使用的是Python 2.7.6 Spyder IDE Win7

1 个答案:

答案 0 :(得分:10)

这是正常的浮点不准确。将0.05多次添加到0.7并不一定总计为1。

print x更改为print repr(x),为最后x输出1.0000000000000002。

>>> np.arccos(1.0000000000000002)
__main__:1: RuntimeWarning: invalid value encountered in arccos
nan