Рубрики
Без рубрики

Python – numpy.arange ()

Будучи линейной последовательностью генератора, функция Numpy.Arange () используется для генерации последовательности чисел в линейном пространстве с равномерным размером шага. Это

Автор оригинала: 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 () должен быть единодушный выбор среди программистов при работе с большим массивом.

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

Рекомендации