Генерируйте равные интервалы значений, включая правый конец, используя NumPy .arange - PullRequest
2 голосов
/ 17 января 2020

Предположим, я хочу создать массив от 0 до 1 с интервалом 0,1. В R мы можем сделать

> seq(0, 1, 0.1)
 [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

В Python, поскольку numpy.arange не включает в себя правый конец, мне нужно добавить небольшое количество к stop.

* 1007. *

Но это кажется немного странным. Можно ли заставить numpy.arange включить правильный конец? Или, может быть, некоторые другие функции могут это сделать?

Ответы [ 2 ]

3 голосов
/ 17 января 2020

Вы должны быть очень осторожны, используя arange для шагов с плавающей запятой. Из документов :

При использовании нецелого шага, такого как 0,1, результаты часто не будут согласованными. Для этих случаев лучше использовать numpy .linspace.

Вместо этого используйте linspace, что позволяет указать точное количество возвращаемых значений.

>>> np.linspace(0, 1, 11)
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])

linspace также фактически позволяет вам указать, следует ли включать конечную точку (True по умолчанию):

>>> np.linspace(0, 1, 11, endpoint=True)
array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
>>> np.linspace(0, 1, 11, endpoint=False)
array([0.        , 0.09090909, 0.18181818, 0.27272727, 0.36363636,
       0.45454545, 0.54545455, 0.63636364, 0.72727273, 0.81818182,
       0.90909091])
3 голосов
/ 17 января 2020

Нет, как указано в документе:

Конец интервала. Интервал не включает это значение ...

Чтобы конец интервала включал фактическое конечное значение, необходимо добавить step к end, нет пути назад Может быть, немного чище:

step = 0.1
start = 0.
stop = 1.

np.arange(start, stop+step, step)
# array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...