Конструкторы массивов: 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.
