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

时间:2019-01-09 13:53:48

标签: python-3.x numpy

在编写一些数组迭代内容时,我遇到了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开始,最后一个值又消失了。

如果您希望在将范围精确地扩展一步时将数组增加一,这将导致一些明显的问题。

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

系统信息:Python 3.6.5,numpy 1.14.0

1 个答案:

答案 0 :(得分:3)

np.linspace文档指出:

  

使用非整数步骤(例如0.1)时,结果通常将不一致。在这些情况下,最好使用linspace。

因此,您应该考虑改用{{3}}。

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

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])