numpy `arange` 超过最终值

问题描述 投票:0回答:1

我原以为 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。

python numpy range precision
1个回答
4
投票

来自

arange
文档:

均匀间隔值的数组。

对于浮点参数,结果的长度为

ceil((stop - start)/step)
。由于浮点溢出,此规则可能会导致 out 的最后一个元素大于 stop。

你的

step
乘以数组的长度大于321。
linspace
对端点更加小心。

© www.soinside.com 2019 - 2024. All rights reserved.