Отсутствие поддержки с плавающей точкой в range
не кажется большой ошибкой. Предлагаемая ссылка показывает все виды способов генерации чисел. Они также указывают на сложные вопросы. numeric_range
также обсуждает эти вопросы.
arange
может обрабатывать шаги с плавающей точкой, но с предупреждением.
In [79]: np.arange(0,10,1.25)
Out[79]: array([0. , 1.25, 2.5 , 3.75, 5. , 6.25, 7.5 , 8.75])
Вместо этого рекомендуется
linspace
с лучшим контролем конечной точки. Для чего стоит MATLAB также имеет функцию linspace
.
In [80]: np.linspace(0,10,9)
Out[80]: array([ 0. , 1.25, 2.5 , 3.75, 5. , 6.25, 7.5 , 8.75, 10. ])
Но мне кажется, что масштабирование range
будет самым чистым генератором:
In [81]: g = (i*1.25 for i in range(9)) # generator expression
In [82]: list(g)
Out[82]: [0.0, 1.25, 2.5, 3.75, 5.0, 6.25, 7.5, 8.75, 10.0]
Одна из ответов на ссылку предлагает itertools.takewhile
:
In [83]: import itertools
In [86]: g = itertools.takewhile(lambda x: x<10, itertools.count(0,1.25))
In [87]: list(g)
Out[87]: [0, 1.25, 2.5, 3.75, 5.0, 6.25, 7.5, 8.75]
Оба этих ответа питают один генератор другому, в соответствии с философией, которую я цитировал в своем комментарии. Сборка сложных действий путем объединения меньших строительных блоков - это типичный Python, а тем более numpy
.