使用负十进制增量时出现奇怪的np.arange行为

时间:2015-10-17 23:39:18

标签: python numpy

np.arange(1,-1,-1) 

产量

array([1, 0])

正如所料。

np.arange(1,-1,-0.5)
Out[8]: array([ 1. ,  0.5,  0. , -0.5]

再一次都很好。

np.arange(1,-1,-0.2)
Out[10]: 
array([1.00000000e+00,   8.00000000e-01,   6.00000000e-01,
     4.00000000e-01,   2.00000000e-01,   2.22044605e-16,
    -2.00000000e-01,  -4.00000000e-01,  -6.00000000e-01,
    -8.00000000e-01])

应该为零的元素发生了什么?

相同
np.arange(1,-1,-0.1)
Out[11]: 
array([1.00000000e+00,   9.00000000e-01,   8.00000000e-01,
     7.00000000e-01,   6.00000000e-01,   5.00000000e-01,
     4.00000000e-01,   3.00000000e-01,   2.00000000e-01,
     1.00000000e-01,   2.22044605e-16,  -1.00000000e-01,
    -2.00000000e-01,  -3.00000000e-01,  -4.00000000e-01,
    -5.00000000e-01,  -6.00000000e-01,  -7.00000000e-01,
    -8.00000000e-01,  -9.00000000e-01])

这绝对不可取,但这是预期的行为吗?

2 个答案:

答案 0 :(得分:1)

你的零元素是他们期望的。他们只是在某种程度上代表,你没想到。

2.22044605e-16是一个用scientific notation写的数字,等于0.000000000000000222044605,差不多是0.你可以阅读更多关于浮点的压痕numbers here

答案 1 :(得分:1)

答案是非常期待的。由于位数有限,浮点数精度不能精确。我认为这个问题已经出现在这里,并得到了回答,例如: https://stackoverflow.com/a/5160355/3115901