1 回答

TA贡献1797条经验 获得超4个赞
这是由于浮点精度。查看浮点数的实际十进制表示而不进行任何舍入将使它更清楚:
15.1%1
# 0.09999999999999964
16.1%1
# 0.10000000000000142
请注意,就像 python 一样range,np.arange不包括end在创建的范围内,因此除非浮点错误导致值大于end范围中的步长,否则它不会被包括在内。这是第一个的情况float,它的小数部分小于0.1。
文档确实建议np.linspace在使用非整数步骤时使用,因为结果可能不一致,正是出于上述原因。此外,它还包含一个endpoint参数,允许您执行以下操作:
np.linspace(14.1,15.1, 11, endpoint=True)
# array([14.1, 14.2, 14.3, 14.4, 14.5, 14.6, 14.7, 14.8, 14.9, 15. , 15.1])
而且,正如@divakar 所建议的那样,概括地说,您可以设置num为:
start = 14.1
stop = 15.1
step = 0.1
num = 1+int((stop-start)/step)
np.linspace(start, stop, num, endpoint=True)
# array([14.1, 14.2, 14.3, 14.4, 14.5, 14.6, 14.7, 14.8, 14.9, 15. , 15.1])
添加回答
举报