функция numpy arange возвращает несовместимый массив - PullRequest
0 голосов
/ 09 января 2019

При кодировании некоторых элементов итерации массива я столкнулся со странным поведением функции numpy arange():

>>> import numpy as np

>>> np.arange(0.13,0.16, step=0.01)
array([0.13, 0.14, 0.15])

>>> np.arange(0.12,0.16, step=0.01)
array([0.12, 0.13, 0.14, 0.15, 0.16])

>>> np.arange(0.11,0.16, step=0.01)
array([0.11, 0.12, 0.13, 0.14, 0.15])

Как видите, при запросе запуска на 0.13 результат останавливается на шаг ниже конечного значения (как и должно быть), но при запросе запуска на 0.12 возвращается последнее значение! Далее, начиная с 0.11, последнее значение снова исчезает.

Это вызывает некоторые очевидные проблемы, если вы ожидаете, что массив будет увеличен на единицу при расширении диапазона ровно на один шаг ...

Есть идеи, почему непоследовательное поведение?

Информация о системе: Python 3.6.5, numpy 1.14.0

1 Ответ

0 голосов
/ 09 января 2019

np.arange Состояния документации:

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

Итак, вы должны рассмотреть возможность использования np.linspace .

Вы можете реализовать свой собственный метод arange, используя linspace:

def my_arange(start, end, step):
    return np.linspace(start, end, num=round((end-start)/step), endpoint=False)

И это будет работать, как и ожидалось:

In [27]: my_arange(0.13, 0.16, step=0.01)
Out[27]: array([ 0.13,  0.14,  0.15])

In [28]: my_arange(0.12, 0.16, step=0.01)
Out[28]: array([ 0.12,  0.13,  0.14,  0.15])

In [29]: my_arange(0.11, 0.16, step=0.01)
Out[29]: array([ 0.11,  0.12,  0.13,  0.14,  0.15])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...