Существует ли пустая версия arange (), которая возвращает объект генератора, а не весь массив? - PullRequest
0 голосов
/ 09 мая 2019

По причинам, которые я не могу понять, Python3 все еще не предоставляет встроенный range() подобный объект генератора для чисел с плавающей запятой.

Так что введите numpy.arange().Однако эта функция возвращает массив.Массивы с плавающей точкой просто для итерации не имеют никакого фундаментального смысла, когда они очень большие, что для моего использования является обычным.закодировать вручную?

1 Ответ

1 голос
/ 11 мая 2019

Отсутствие поддержки с плавающей точкой в ​​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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...