Коротко
- Из данных:
np.array(список);np.asarray(x)не копирует, еслиxуже массив. - Заполненные:
zeros,ones,full(shape, значение),empty(не заполняет — там мусор). - Форма передаётся кортежем:
np.zeros((2, 3)). - Диапазоны:
arange(start, stop, step)— какrange,stopне входит;linspace(start, stop, num)— ровноnumточек, конец входит. *_like(a)создаёт массив той же формы и типа, чтоa.
Синтаксис
np.array(obj, dtype=None)
np.zeros(shape, dtype=float) # так же ones, empty
np.full(shape, fill_value, dtype=None)
np.arange(start=0, stop, step=1)
np.linspace(start, stop, num=50, endpoint=True)
np.eye(N, M=None, k=0) # единицы на диагонали
np.zeros_like(a) # так же ones_like, full_like, empty_likeПараметры
ПараметрЧто делаетПо умолчанию
shapeформа: число для одномерного массива или кортеж (строки, столбцы, …)обязательныйdtypeтип элементов: float, int, bool, "float32"…; None — определить по даннымfloat или Nonefill_valueчем заполнить массив в full / full_likeобязательныйstepшаг arange; может быть дробным, но см. подводные камни1numсколько точек вернёт linspace50endpointвключать ли stop в linspaceTruekсдвиг диагонали в eye: 1 — над главной, -1 — под ней0Примеры
np.array([[1, 2, 3],
[4, 5, 6]], dtype=float)Вывод
array([[1., 2., 3.],
[4., 5., 6.]])print(np.zeros(3))
print(np.ones((2, 3), dtype=int))
np.full((2, 2), 7)Вывод
[0. 0. 0.]
[[1 1 1]
[1 1 1]]
array([[7, 7],
[7, 7]])print(np.arange(5))
print(np.arange(2, 10, 3)) # stop не входит
np.arange(0, 1, 0.25)Вывод
[0 1 2 3 4] [2 5 8] array([0. , 0.25, 0.5 , 0.75])
print(np.linspace(0, 1, 5)) # 5 точек, конец входит
np.linspace(0, 1, 5, endpoint=False)Вывод
[0. 0.25 0.5 0.75 1. ] array([0. , 0.2, 0.4, 0.6, 0.8])
np.eye(3, dtype=int)Вывод
array([[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])temps = np.array([[12.5, 14.0], [9.0, 11.5]])
print(np.zeros_like(temps))
np.full_like(temps, np.nan)Вывод
[[0. 0.]
[0. 0.]]
array([[nan, nan],
[nan, nan]])Подводные камни
arange с дробным шагом
Из-за погрешности float последняя точка может попасть в диапазон, хотя stop не должен входить. Для дробных сеток используйте linspace — там число точек задано явно.
np.arange(1, 1.3, 0.1) # ожидали 3 числа, а получили 4Вывод
array([1. , 1.1, 1.2, 1.3])
Форма без скобок
np.zeros(2, 3) читается как «2 элемента типа 3». Форму двумерного массива передавайте кортежем: np.zeros((2, 3)).
np.zeros(2, 3) # второй аргумент — это dtypeОшибка
TypeError: Cannot interpret '3' as a data type
empty не значит «нули»
np.empty только выделяет память и не заполняет её: в массиве может оказаться что угодно, в том числе нули — на это нельзя полагаться. Используйте его, только если сразу перезапишете все элементы.