Задачи на reshape, axis и broadcasting в NumPy

Здесь собраны задачи на формы массивов NumPy: как меняется shape после преобразования, по какой оси считается результат и почему broadcasting принимает одни формы и отвергает другие.

Быстрая проверка совместимости

Сравнивайте размеры справа налево. Для каждой пары размер должен совпадать или быть равен 1; отсутствующая слева ось считается единичной. Формы (3, 1) и (1, 4) дают результат (3, 4). Это правило полезнее, чем заучивание отдельных примеров.

import numpy as np
column = np.array([10, 20, 30])[:, None]
row = np.array([1, 2, 3, 4])[None, :]
result = column + row
print(column.shape, row.shape, result.shape)
print(result[0].tolist())

Результат:

(3, 1) (1, 4) (3, 4)
[11, 12, 13, 14]

Не смешивайте преобразования

reshape меняет разбиение последовательности на оси; transpose переставляет оси; newaxis добавляет ось длины 1; squeeze удаляет единичные оси. При агрегации axis обозначает исчезающую ось. keepdims=True сохраняет её длиной 1 для последующих операций.

Что решить

Если пока сложно читать исходный массив, начните с индексации и срезов. Официальное правило broadcasting. Учебный маршрут — бесплатный курс NumPy и pandas.

NumPy shape, axis и broadcasting: задачи и примеры