use*_*407 6 python numpy numerical-computing python-3.x numpy-ndarray
在下面的代码中。我得到了 x1 的预期结果
import numpy as np
x1 = np.arange(0.5, 10.4, 0.8)
print(x1)
[ 0.5 1.3 2.1 2.9 3.7 4.5 5.3 6.1 6.9 7.7 8.5 9.3 10.1]
Run Code Online (Sandbox Code Playgroud)
但在下面的代码中,当我设置 dtype=int 时,为什么 x2 的结果不是[ 0 1 2 2 3 4 5 6 6 7 8 9 10],而是我得到 x2 的值,因为[ 0 1 2 3 4 5 6 7 8 9 10 11 12]最后一个值 12 超过了 10.4 的最终值。请澄清我对此的概念。
import numpy as np
x2 = np.arange(0.5, 10.4, 0.8, dtype=int)
print(x2)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12]
Run Code Online (Sandbox Code Playgroud)
根据文档:https://docs.scipy.org/doc/numpy1.15.0/reference/ generated/numpy.arange.html
stop : 数字间隔结束。间隔不包括该值,除非在某些情况下,step 不是整数并且浮点舍入会影响 out 的长度。
arange : ndarray 均匀间隔值的数组。
对于浮点参数,结果的长度为 ceil((stop - start)/step)。由于浮点溢出,此规则可能会导致 out 的最后一个元素大于 stop。
所以这里是最后一个元素。
In [33]: np.ceil((10.4-0.5)/0.8)
Out[33]: 13.0
Run Code Online (Sandbox Code Playgroud)
因此,我们看到在 的情况下超调到 12 np.arange(0.5, 10.4, 0.8, dtype=int),因为stop=13在上述情况下,默认值为 0,
因此我们观察到的输出是。
In [35]: np.arange(0.5, 10.4, 0.8, dtype=int)
Out[35]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
Run Code Online (Sandbox Code Playgroud)
因此,生成整数范围的更好方法是使用整数参数,如下所示:
In [25]: np.arange(0, 11, 1)
Out[25]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Run Code Online (Sandbox Code Playgroud)