dtype=int vs float 的 numpy arange 步骤迭代错误记录

numpy arange step iteration error logging for dtype=int vs float

我是 numpy 的新手并查看了文档 https://numpy.org/devdocs/reference/generated/numpy.arange.html 但似乎无法获得错误日志或表明它超出了 int '3' 的停止的指示。 float 似乎按预期工作,但不是 int。我相信这是由于 python 如何解释 int 和 float,但 int 不应该自动舍入 0.5 值吗? Comparing a float and an int in Python https://numpy.org/doc/stable/user/basics.types.html

我的问题是,arange 为什么以及如何将 int 解释为停止点是“6”而不是“3”,如果使用 int,它不应该在 2 处停止吗?

多谢指教

x = np.arange(-1, 3, 0.5, dtype=int)
y = np.arange(-1, 3, 0.5, dtype=float)
print('x = ', x)
print('y = ', y)


x =  [-1  0  1  2  3  4  5  6]
y =  [-1.  -0.5  0.   0.5  1.   1.5  2.   2.5]

根据您一定已经阅读过的文档,因为您的示例与那里给出的示例很接近

Another stability issue is due to the internal implementation of
`numpy.arange`.
The actual step value used to populate the array is
``dtype(start + step) - dtype(start)`` and not `step`. Precision loss
can occur here, due to casting or due to using floating points when
`start` is much larger than `step`. This can lead to unexpected
behaviour.

那个dtype(start + step) - dtype(start):

In [25]: int(-1 + .5) - int(-1)
Out[25]: 1

看起来它最初计算值的数量为 return,使用与 float 情况相同的数学 - 因此 xy 具有相同的长度。

ceil((stop - start)/step)

In [29]: np.ceil((3-(-1))/.5)
Out[29]: 8.0

我的猜测是 'iterates' [29] 值与 [25] 步骤。这不是 'iterate until it reaches/passes the stop' 逻辑。

我的问题的答案就像 hpaulj 提到的那样,正确使用 arange 可能会导致意外行为。 int 的小数点是不好的做法,因此导致了这种行为。