Автор оригинала: Pankaj Kumar.
Будучи линейной последовательностью генератора, numpy.arange ()
Функция используется для генерации последовательности чисел в линейном пространстве с равномерным размером шага.
Это похоже на другую функцию, numpy.linspace (), которая также генерирует линейную последовательность с равномерным размером шага.
Давайте понять, как мы можем использовать эту функцию для генерации разных последовательностей.
Синтаксис
Формат:
array = numpy.arange(start, stop, step, dtype=None)
Здесь,
Начать
-> Начальная точка ( включена ) диапазона, который установлен на 0 по умолчанию.Стоп
-> Конечная точка ( исключены ) диапазонашаг
-> Размер шага последовательности, который установлен на 1 по умолчанию. Это может быть любым действительным числом кроме Нуль.dtype
-> Тип выходного массива. Еслиdtype
не дается (или предоставляется какNone
), тип DataType будет выведен из типа других входных аргументов.
Давайте возьмем простой пример, чтобы понять это:
import numpy as np a = np.arange(0.02, 2, 0.1, None) print('Linear Sequence from 0.02 to 2:', a) print('Length:', len(a))
Это будет генерировать линейную последовательность от 0.2 (включая) до 2 (исключен) с шагом размером 0,1 Так что будет (2 – 0,2)/0,1 – 1 = 20 Элементы в последовательности, которая представляет собой длину результирующего наменяющего массива.
Выход
Linear Sequence from 0.02 to 2: [0.02 0.12 0.22 0.32 0.42 0.52 0.62 0.72 0.82 0.92 1.02 1.12 1.22 1.32 1.42 1.52 1.62 1.72 1.82 1.92] Length: 20
Вот еще одна строка кода, которая генерирует количество от 0 до 9, используя Arange ()
Используя размер шага по умолчанию 1:
>>> np.arange(0, 10) array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Если размер шага предоставляется как 0, это не является допустимой последовательностью, поскольку шаг 0 подразумевает, что вы разделяете диапазон на 0, что поднимет | ZerodivisionError
Исключение.
import numpy as np # Invalid Step Size! a = np.arange(0, 10, 0)
Выход
ZeroDivisionError: division by zero
Примечание : Эта функция немного отличается от numpy.linspace ()
, который по умолчанию включает в себя как запуск, так и конечные точки для расчета последовательности. Он также не принимает размер шага в качестве аргумента, а скорее принимает только количество элементов в последовательности.
Простой пример
Давайте теперь поставим все это вместе в простой пример, чтобы продемонстрировать линейность последовательностей, генерируемых numpy.arange ()
Отказ
Следующие кодовые участки 2 линейных последовательностей между [0, 20]
и [0, 10]
Использование numpy.arange ()
Чтобы показать, что существует однородность, генерируемая последовательностью, поэтому полученные массивы являются линейными.
import numpy as np import matplotlib.pyplot as plt y = np.zeros(5) # Construct two linear sequences # First one has a step size of 4 units x1 = np.arange(0, 20, 4) # Second one has a step size of 2 units x2 = np.arange(0, 10, 2) # Plot (x1, [0, 0, ..]) plt.plot(x1, y, 'o') # Plot (x2, [0.5, 0.5, ..]) plt.plot(x2, y + 0.5, 'o') # Set limit for y on the plot plt.ylim([-0.5, 1]) plt.show()
Выход
Как видите, оранжевые точки представляют линейную последовательность от 0 до 10, имеющих размер шага 2 единицы, но с 10 не включен, последовательность – [0, 2, 4, 6, 8]
Отказ Точно так же синие точки представляют последовательность [0, 4, 8, 12, 16]
Отказ
Numpy.Arange () VS Range ()
Весь смысл использования numpy
Модуль – убедиться, что операции, которые мы выполняем, выполняются как можно быстрее, поскольку numpy
это интерфейс Python для более низкого уровня C ++.
Многие операции в numpy
являются Вектор означает, что операции происходят параллельно, когда numpy
используется для выполнения любой математической операции. Благодаря этому, для больших массивов и последовательностей, numpy
производит лучшую производительность.
Поэтому numpy.arange ()
намного быстрее, чем родной Python Диапазон ()
Функция для генерации аналогичных линейных последовательностей.
Тест производительности
Мы не должен Переплетение numpy
Векторная операция наряду с петлей Python. Это значительно замедляет производительность, так как код итерации итерации с использованием нативного Python.
Например, приведенный ниже фрагмент показывает, как вы должны Не Используйте Numpy.
for i in np.arange(100): pass
Рекомендуемый способ напрямую использовать numpy
операция.
np.arange(100)
Давайте проверим разницу в производительности, используя Python’s Время течения
модуль.
import timeit import numpy as np # For smaller arrays print('Array size: 1000') # Time the average among 10000 iterations print('range():', timeit.timeit('for i in range(1000): pass', number=10000)) print('np.arange():', timeit.timeit('np.arange(1000)', number=10000, setup='import numpy as np')) # For large arrays print('Array size: 1000000') # Time the average among 10 iterations print('range():', timeit.timeit('for i in range(1000000): pass', number=10)) print('np.arange():', timeit.timeit('np.arange(1000000)', number=10, setup='import numpy as np'))
Выход
Array size: 1000 range(): 0.18827421900095942 np.arange(): 0.015803234000486555 Array size: 1000000 range(): 0.22560399899884942 np.arange(): 0.011916546000065864
Как вы можете видеть, numpy.arange ()
Работает особенно хорошо для больших последовательностей. Это почти 20 Times (!!) так быстро, как обычный код Python для размера просто 1000000 , что будет лучше намного лучше для больших массивов.
Поэтому numpy.arange ()
должен быть единодушный выбор среди программистов при работе с большим массивом.
Для небольших массивов, когда разница в производительности не так много, вы можете использовать среди двух методов.