numpy arange函数返回不一致的数组



在编写一些数组迭代内容时,我遇到了numpy arange()函数的这种奇怪行为:

>>> import numpy as np
>>> np.arange(0.13,0.16, step=0.01)
array([0.13, 0.14, 0.15])
>>> np.arange(0.12,0.16, step=0.01)
array([0.12, 0.13, 0.14, 0.15, 0.16])
>>> np.arange(0.11,0.16, step=0.01)
array([0.11, 0.12, 0.13, 0.14, 0.15])

如您所见,当被要求从0.13开始时,结果在结束值之前停止一步(因为它应该),但是当要求从0.12开始时,返回最后一个值!再往下,从 0.11 开始,最后一个值又消失了。

如果您期望在将范围扩展一步时数组增加 1,这会导致一些明显的问题......

关于为什么不一致的行为的任何想法?

系统信息 : 蟒蛇 3.6.5, numpy 1.14.0

np.arange 文档指出:

使用非整数步长(如 0.1)时,结果通常不一致。对于这些情况,最好使用 linspace。

因此,您应该考虑改用 np.linspace。

您可以使用linspace实现自己的arange方法:

def my_arange(start, end, step):
    return np.linspace(start, end, num=round((end-start)/step), endpoint=False)

它将按预期工作:

In [27]: my_arange(0.13, 0.16, step=0.01)
Out[27]: array([ 0.13,  0.14,  0.15])
In [28]: my_arange(0.12, 0.16, step=0.01)
Out[28]: array([ 0.12,  0.13,  0.14,  0.15])
In [29]: my_arange(0.11, 0.16, step=0.01)
Out[29]: array([ 0.11,  0.12,  0.13,  0.14,  0.15])

最新更新