Короткий ответ
Broadcasting — это механизм NumPy, который позволяет выполнять поэлементные операции между массивами разной формы, автоматически «растягивая» меньший массив без физического копирования данных.
Как это работает подробнее
NumPy сравнивает формы массивов справа налево; если размерность равна 1 или отсутствует, она расширяется до нужного размера виртуально, без копирования памяти, и только затем выполняется поэлементная операция.
Пример кода
Пример Python
import numpy as np
matrix = np.array([[1, 2, 3], [4, 5, 6]])
col_mean = matrix.mean(axis=0)
centered = matrix - col_mean
print(col_mean) # [2.5 3.5 4.5]
print(centered)Что использовать на практике
- На практике: broadcasting удобен для операций вида "вычесть среднее по столбцу из каждой строки" или "умножить таблицу на вектор коэффициентов"; это избавляет от явных циклов и ускоряет вычисления на больших массивах.
- Проверка: col_mean имеет форму (3,), а вычитание из матрицы формы (2,3) работает благодаря broadcasting построчно; сумма centered по каждому столбцу должна быть близка к нулю.
Подводные камни
- Частые ошибки: путают формы массивов и получают не ту ось broadcasting (например, вычитают построчно вместо постолбцового среднего), получая численно валидный, но содержательно неверный результат; не проверяют shape массивов перед операцией, из-за чего ошибка несовместимости форм падает глубоко в коде.