NumPy и pandas: практический тренажёрNumPy: массивы, форма и индексацияКонструкторы массивов: arange, linspace, zeros, ones, full

Конструкторы массивов: arange, linspace, zeros, ones, full

Уроки курсаКонструкторы массивов: arange, linspace, zeros, ones, full

В прошлом уроке мы создавали массивы из готовых списков через np.array и сразу проверяли результат через .shape и .dtype. Теперь задача другая: построить массив не из данных, которые уже есть, а с нуля — по правилу. Именно для этого в NumPy существуют конструкторы.

Числовые последовательности: np.arange и np.linspace

Два самых частых случая — «дай мне числа с таким-то шагом» и «дай мне ровно N точек в таком-то диапазоне». Это разные задачи, и под каждую есть свой конструктор.

np.arange: задаёшь шаг — получаешь последовательность

np.arange(start, stop, step) работает как встроенный range, только возвращает массив NumPy. Граница stop в результат не попадает.

import numpy as np

a = np.arange(0, 10, 2)
print(a)        # [0 2 4 6 8]
print(a.shape)  # (5,)
print(a.dtype)  # целочисленный dtype (например, int64 на большинстве платформ)

Поскольку все аргументы целые, NumPy выводит целочисленный dtype. Конкретная ширина (32 или 64 бита) зависит от платформы; если нужен точный тип, задавайте его явно. Если хотя бы один аргумент дробный, dtype автоматически становится float64:

b = np.arange(0, 1, 0.3)
print(b)        # [0.  0.3  0.6  0.9]
print(b.dtype)  # float64

Сколько элементов окажется в массиве — зависит от шага и диапазона. Это не всегда очевидно при дробных аргументах из-за особенностей арифметики с плавающей точкой. Если нужно точное количество точек, лучше использовать linspace.

np.linspace: задаёшь количество точек — получаешь равномерную сетку

np.linspace(start, stop, num) возвращает ровно num равноудалённых точек от start до stop, причём обе границы включены.

c = np.linspace(0, 1, 5)
print(c)        # [0.   0.25 0.5  0.75 1.  ]
print(c.shape)  # (5,)
print(c.dtype)  # float64

linspace всегда возвращает float64 при обычных числовых границах — независимо от того, целые они или нет. Количество элементов всегда точно равно num: никаких неожиданностей из-за округлений.

Когда что использовать

Выбор между конструкторами определяется тем, что вы контролируете явно:

  • arange — когда известен нужный шаг между элементами, а количество точек вычисляется из диапазона и шага. Граница stop не включается.
  • linspace — когда важно получить ровно N точек, а шаг NumPy вычислит сам. Обе границы включены.

Ключевое различие: в arange вы управляете шагом; в linspace — количеством точек. Если нужен предсказуемый размер массива без зависимости от дробной арифметики — выбирайте linspace.