По документам: https://docs.scipy.org/doc/numpy1.15.0/reference/generated/numpy.arange.html
стоп: номер
Конец интервала Интервал не включает это значение, за исключением некоторых случаев, когда шаг не является целым числом, а округление с плавающей запятой влияет на длину out.
arange: ndarray
Массив равномерно распределенных значений.
Для аргументов с плавающей запятой длина результата равна ceil ((стоп - старт) / шаг). Из-за переполнения с плавающей запятой это правило может привести к тому, что последний элемент out будет больше стопа.
Так что здесь последний элемент будет.
In [33]: np.ceil((10.4-0.5)/0.8)
Out[33]: 13.0
Следовательно, мы видим перерегулирование на 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])
Следовательно, лучший способ генерации целочисленных диапазонов - использовать целочисленные параметры, например, так:
In [25]: np.arange(0, 11, 1)
Out[25]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])