numpy.r_可用于从切片表示法快速生成数组。但是,以下示例似乎演示了不一致的行为:
>>> import numpy as np
>>> a = np.r_[0.1 : 0.3 : 0.1]
>>> a
array([0.1, 0.2])
未包括切片0.3的端点-如预期。
>>> b = np.r_[0.1 : 0.4 : 0.1]
>>> b
array([0.1, 0.2, 0.3, 0.4])
包括切片0.4的端点!
似乎没有对documentation中的此行为的解释。
numpy.r_可用于从切片表示法快速生成数组。但是,以下示例似乎演示了不一致的行为:
>>> import numpy as np
>>> a = np.r_[0.1 : 0.3 : 0.1]
>>> a
array([0.1, 0.2])
未包括切片0.3的端点-如预期。
>>> b = np.r_[0.1 : 0.4 : 0.1]
>>> b
array([0.1, 0.2, 0.3, 0.4])
包括切片0.4的端点!
似乎没有对documentation中的此行为的解释。
2条答案
按热度按时间bvn4nwqk1#
当
c
为真实的时,numpy.r_[a:b:c]
等价于numpy.arange(a, b, c)
。这里使用浮点数是一个坏主意,如numpy.arange
docs中所述-长度可能是错误的,因为基于浮点值的长度计算会出现浮点舍入错误,并且由于NumPy如何在内部处理步长的实现细节,步长本身可能会遭受精度损失。正如
numpy.arange
文档中所建议的那样,您应该使用numpy.linspace
。numpy.linspace
将元素计数作为整数,而不是一个步骤:6qfn3psc2#
因为在python中真实的并不总是四舍五入的,就像你的例子中,水平步长0.2+0.1接近0.30000000000000004,结果会是错误的。我会使用这种方法,但它看起来更复杂: