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 情况相同的数学 - 因此 x
和 y
具有相同的长度。
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 的小数点是不好的做法,因此导致了这种行为。
我是 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 情况相同的数学 - 因此 x
和 y
具有相同的长度。
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 的小数点是不好的做法,因此导致了这种行为。