Встроенные функции: sum, mean, max по столбцам
Как агрегирующие функции обходят матрицу и почему по умолчанию они идут вдоль столбцов.
Для матрицы функции
sum,mean,maxпо умолчанию работают по столбцам, возвращая вектор-строку результатов.
Правило столбцов
Это поведение нужно усвоить накрепко. Для вектора sum просто складывает все элементы. Но для матрицы sum(A) складывает каждый столбец отдельно и возвращает вектор-строку из сумм столбцов. То же у mean (среднее), max, min, std, prod. Причина — column-major хранение: проход по столбцам естественен для памяти.
A = [1 2 3; 4 5 6];
sum(A) % 5 7 9 — суммы столбцов
mean(A) % 2.5 3.5 4.5 — средние столбцов
Вывод:
ans =
5 7 9
ans =
2.5000 3.5000 4.5000
Управление измерением
Чтобы агрегировать по строкам, передают второй аргумент — номер измерения: 1 — по столбцам (вниз), 2 — по строкам (вправо). А чтобы получить сумму всех элементов матрицы, применяют функцию дважды или используют sum(A(:)) — двоеточие разворачивает матрицу в один столбец.
A = [1 2 3; 4 5 6];
sum(A, 2) % 6; 15 — суммы строк
sum(A(:)) % 21 — сумма всех элементов
total = sum(sum(A)); % тоже 21
max/min с позицией
Функции max и min умеют возвращать не только значение, но и его индекс — через второй выходной аргумент. Это частый приём: найти, где максимум, а не только чему он равен.
v = [3 8 1 9 4];
[m, idx] = max(v) % m = 9, idx = 4
Вывод:
m =
9
idx =
4
sort и сортировка с индексами
Функция sort сортирует по столбцам (по возрастанию по умолчанию). Второй выход даёт перестановку индексов — полезно, чтобы переупорядочить связанные данные. Аргумент 'descend' сортирует по убыванию.
Как работает под капотом
«По столбцам по умолчанию» — прямое следствие модели данных: раз память column-major, проход вдоль столбца читает соседние ячейки и дружит с кэшем процессора. Поэтому даже если бы две стратегии были одинаково логичны математически, MATLAB выбирает ту, что быстрее на его раскладке памяти. Зная это, вы не удивитесь, почему sum матрицы даёт строку, а не одно число, и почему привычка к A(:) для «всего сразу» так распространена.
От агрегатов к разведочной статистике
Встроенные агрегаты — это первый инструмент знакомства с незнакомыми данными. Загрузив набор измерений, опытный аналитик первым делом смотрит на сводку: min, max и mean по столбцам показывают диапазон и центр, std — разброс, median рядом со средним намекает на перекос распределения, а большое расхождение между mean и median выдаёт выбросы. Функция summary для таблиц собирает такую сводку автоматически. Эти несколько строк, выполненные до всякого моделирования, экономят массу времени: они сразу выявляют ошибки в данных (невозможные значения, перепутанные единицы, пропуски) и подсказывают, какой анализ уместен. Привычка начинать с агрегатной сводки — простой, но мощный приём, перекликающийся с курсом статистики, где разведочный анализ данных рассматривается подробно.
Частые ошибки
- Ждать, что
sum(A)для матрицы даст одно число — он даёт вектор сумм столбцов. - Забыть второй аргумент измерения, когда нужна агрегация по строкам.
- Игнорировать второй выход
max/sort, теряя информацию о позициях.
Семейство агрегатов и обработка пропусков
Помимо базовых sum и mean, MATLAB предлагает богатый набор статистических агрегатов: median (медиана), std и var (разброс), mode (наиболее частое значение), cumsum и cumprod (нарастающие итоги). У многих из них есть варианты, устойчивые к пропускам: mean(v, 'omitnan') считает среднее, игнорируя NaN — отсутствующие значения. Это критично для реальных данных, где пропуски неизбежны: обычная mean при наличии хотя бы одного NaN вернёт NaN для всего столбца, и расчёт молча испортится. Привычка явно указывать, что делать с пропусками, отличает надёжный код от хрупкого.
Округление и границы
К базовому инструментарию относятся и поэлементные функции округления: round (к ближайшему), floor (вниз), ceil (вверх), fix (к нулю), а также mod и rem для остатка от деления. Все они, как и положено в MATLAB, работают сразу над всем массивом. Особенно часто встречается mod: mod(k, 2) == 0 отбирает чётные индексы, mod(angle, 360) приводит угол в диапазон. Эти мелкие функции — кирпичики, из которых складываются векторизованные решения вместо циклов с условиями, и владеть ими так же важно, как агрегатами.
Итоги
- Агрегаты по умолчанию идут по столбцам;
sum(A,2)— по строкам. A(:)разворачивает матрицу в столбец — удобно для «всего сразу».max/sortвозвращают и значения, и индексы вторым выходом.