MMULT. Примеры использования
Это очередное определение, которое можно использовать для практического применения формулы МУМНОЖ (MMULT)
с целью вычисления произведение двух матриц, представленных в виде массивов (диапазонов).
Вводное слово
Нет уверенности в том, что какое-либо точное описание смысла перемножения матриц, будет усвоено и применимо читателем сразу, “налету”. Основной проблемой, кажется, является сложность восприятия объема передаваемой информации. Необходимо не только представлять, “что перемножается” в данный момент, но и “какой порядок” (очередность) это имеет. И, к слову, само “перемноежение” - это, на самом деле, смесь очередей сумм и попарных умножений.
Далее по тексту возьму на себя смелость выделить сущности, которыми следует оперировать, чтобы представить, в каком случае использовать MMULT
, и как получить хоть какой-то рациональный результат.
Как всегда, ссылки на живые примеры в конце статьи .
Области применения
Эта статья будет интересна тем, кто изучает или использует Таблицы Гугл для анализа и поиска данных. Основой примеров является функция MMULT
. Если вы не знакомы с этой функцией, то необходимо обратиться к справке МУМНОЖ (MMULT)
. Также стоит знать об ARRAYFORMULA
, ТРАНСП (TRANSPOSE)
.
Определения
MMULT
- формула для вычисления воздействия одного диапазона на другой (да-да, слова “матрицы” и “умножение” не понадобится).
Диапазоны - области Таблицы, состоящие из числовых значений, имеющие рамерность в строках и столбцах. Диапазон A2:C6
имеет размерность в 4
строки и 3
столбца (слово колонки также подходит). Еще одно название - массив.
Воздействие - математическая магия. Обычно, эта магия сводится к тому, что на один диапазон (данные) воздействует другой диапазон (чаще всего это массив нулей и единиц, расположенных заданным образом). В зависимости от внешнего вида диапазона воздействия можно выделить виды воздействия (не является исчерпывающим объяснением). Важно то, что природа и закон воздействия всегда одинаковы, меняется лишь состав диапазона. Представьте это как новое математическое действие. Никого не вводит в ступор умножение, а ведь это закономерно равномерно повторяющаяся сумма!
Объяснение MMULT
В количественном смысле, MMULT
можно представить как расчет сумм по строкам или колонкам. Это лишь одно из представлений, но, зато, его уже можно использовать на практике.
Горизонтальное “сведение” или “сумма по строкам”
Чтобы посчитать построчные суммы, достаточно на диапазон воздействовать массивом из единиц размером в одну колонку и количеством строк равным количеству колонок, из которых берутся данные для суммирования.
Например, чтобы посчитать суммы для каждой строки из массива
Колонка 1 | Колонка 2 | Колонка 3 |
---|---|---|
1 | 2 | 3 |
4 | 5 | 6 |
необходимо сделать MMULT
с массивом
- | Диапазон воздействия |
---|---|
Строка 1 | 1 |
Строка 2 | 1 |
Строка 3 | 1 |
в итоге получить
Результат |
---|
6 |
15 |
Очень важно. Число колонок первого диапазона равно числу строк второго.
В Таблицах это
=MMULT(B2:D3;B5:B7)
Стоит обратить внимание, что в
B2:D3
три колонки, а вB5:B7
три строки -MMULT
будет разрешен корректно.
В более практичном смысле: есть данные учета животных по месяцам A7:F10
:
Питомцы | Апрель | Май | Июнь | Июль | Август |
---|---|---|---|---|---|
Собаки | 2 | 3 | 4 | 6 | 9 |
Кошки | 10 | 11 | 12 | 9 | 8 |
Птицы | 25 | 26 | 27 | 3 | 7 |
Чтобы вывести итоги по каждому питомцу за все месяцы, можно использовать MMULT
Питомцы | Сумма |
---|---|
Собаки | 24 |
Кошки | 50 |
Птицы | 88 |
В Таблицах это
Чтобы вывести итоги по каждому питомцу за некоторые месяцы, например, только за “Апрель”, “Май”, “Июнь”, нужно указать диапазон воздействия, где для соответствующих месяцев будет выставлена единица, а для остальных - ноль.
Вертикальное “сведение” или “сумма по колонкам”
Сумма по колонкам получается, если воздействовать диапазоном данных на диапазон единиц размером в одну строку и числом колонок равным числу строк расcчитываемого диапазона. Т.е. массив с единицами теперь идет первым аргументом.
Чтобы вывести итоги по каждому месяцу по всем питомцам вместе, можно использовать MMULT
Апрель | Май | Июнь | Июль | Август | |
---|---|---|---|---|---|
Суммы | 37 | 40 | 43 | 18 | 24 |
В Таблицах это
Чтобы вывести итоги по каждому месяцу для избранных питомцев, например, только для “Собак”, “Кошек”, нужно указать диапазон воздействия, где для соответствующих питомцев будет выставлена единица, а для остальных - ноль.
Воздействие на результат MMULT
Интересно, что MMULT
работает подобно формулам массивов, таким как ARRAYFORMULA
. Но, чтобы воздействовать на результат MMULT
, ее необходимо обернуть в ARRAYFORMULA
. Пример, среднее значение по каждому питомцу за все месяцы. Вместо массива единиц диапазон воздействия заполняется коэффициентами равными отношению единицы к количеству подсчитываемых колонок
=ARRAYFORMULA(MMULT(B8:F10;A15:A19/COUNTA(B7:F7)))
Динамическая генерация диапазонов воздействия
Основная задача сводится к тому, чтобы сгеннеировать строку или колонку единиц или других коэффициентов.
Самым удобным является перебор строк или колонок по номерам и возведение этих значений в нулевую степень с последующим транспонированием.
По строкам
Получим диапазон единиц для “суммы по строкам”:
- Переберем номера колонок
- Возведем номера в нулевую степень
- Транспонируем результат
=ARRAYFORMULA(TRANSPOSE(COLUMN(B8:F10)^0))
Попробуйте самостоятельно с учетом выбранных месяцев
=ARRAYFORMULA(TRANSPOSE(N(REGEXMATCH(B7:F7;"(?i)(апрель|май|июнь)"))))
По колонкам
Получим диапазон единиц для “суммы по колонкам”:
- Переберем номера строк
- Возведем номера в нулевую степень
- Транспонируем результат
=ARRAYFORMULA(TRANSPOSE(ROW(B8:F10)^0))
Комплексный пример с выводом нескольких групп результатов
Диапазон воздействия необязательно должен быть в одну строку или колонку. Например, если для расчета по строкам передать диапазон воздействия из двух колонок, в первом из которых будут единицы, а во втором коэффициент отношения к общему количеству, то итогом будет массив из сумм и средних.
Для сумм
=ARRAYFORMULA(TRANSPOSE(COLUMN(B8:F10)^0))
Для средних
=ARRAYFORMULA(TRANSPOSE(COLUMN(B8:F10)^0/COLUMNS(B8:F10)))
Построение диапазона воздействия
=ARRAYFORMULA({
TRANSPOSE(COLUMN(B8:F10)^0)\
TRANSPOSE(COLUMN(B8:F10)^0/COLUMNS(B8:F10))
})}
Итоговая формула
=ARRAYFORMULA(MMULT(
B8:F10;
{
TRANSPOSE(COLUMN(B8:F10)^0)\
TRANSPOSE(COLUMN(B8:F10)^0/COLUMNS(B8:F10))
}
))
Важные замечания
Крутость формулы MMULT
компенсируется ее ограниченностью в размерах обрабатываемых диапазонов. Следует учитывать, что она не подходит для больших Таблиц, и ее желательно использовать в прогнозируемых рамках.
Это лишь малая часть того, что можно сделать с помощью MMULT
. Некоторые примеры
, которые еще не описаны, уже добавлены в Таблицу.
Ссылки
- Справка МУМНОЖ (MMULT)
- Справка ARRAYFORMULA
- Примеры в Таблице . Можно сделать копию