我原以为 numpy 的
arange(start, end)
会产生 [start, end] 范围内的值。以下示例表明情况并非总是如此(最终值大于 end
):
import numpy as np
start = 2e9
end = start + 321
step = 0.066833171999
x = np.arange(start, end, step=step)
print x[-1] > end # Prints "True"
print x[-1] - end # Prints 0.00013661384582519531
这个误差似乎太大了,不可能是由机器精度引起的(但也许我的想法是错误的)。发生什么事了?
我使用的是 Numpy 版本 1.10.1。
来自
arange
文档:
均匀间隔值的数组。
对于浮点参数,结果的长度为
。由于浮点溢出,此规则可能会导致 out 的最后一个元素大于 stop。ceil((stop - start)/step)
你的
step
乘以数组的长度大于321。linspace
对端点更加小心。