Умножение матрицы на вектор excel

Содержание

  • Процедура перемножения матриц
    • Способ 1: функция МУМНОЖ
    • Способ 2: использование составной формулы
  • Вопросы и ответы

Перемножение матриц в Microsoft Excel

Одной из частых операций, которую выполняют при работе с матрицами, является перемножение одной из них на другую. Программа Excel является мощным табличным процессором, который предназначен, в том числе и для работы над матрицами. Поэтому у него имеются инструменты, которые позволяют перемножить их между собой. Давайте узнаем, как это можно выполнить различными способами.

Процедура перемножения матриц

Сразу нужно сказать, что перемножить между собой можно далеко не все матрицы, а только те, которые соответствуют определенному условию: число столбцов одной матрицы должно быть равным числу строк другой и наоборот. Кроме того, исключается наличие в составе матриц пустых элементов. В этом случае тоже выполнить требуемую операцию не получится.

Способов перемножить матрицы в Экселе все-таки не так уж и много — всего два. И оба они связаны с применением встроенных функций Excel. Разберем в деталях каждый из данных вариантов.

Способ 1: функция МУМНОЖ

Наиболее простым и популярным вариантом среди пользователей является применение функции МУМНОЖ. Оператор МУМНОЖ относится к математической группе функций. Как раз его непосредственной задачей и является нахождение произведения двух матричных массивов. Синтаксис МУМНОЖ имеет такой вид:

=МУМНОЖ(массив1;массив2)

Таким образом этот оператор имеет два аргумента, которые представляют собой ссылки на диапазоны двух перемножаемых матриц.

Теперь давайте посмотрим, как используется функция МУМНОЖ на конкретном примере. Имеется две матрицы, число строк одной из которых, соответствует количеству столбцов в другой и наоборот. Нам нужно перемножить два этих элемента.

Матрицы в Microsoft Excel

  1. Выделяем диапазон, где будет отображаться результат умножения, начиная с его верхней левой ячейки. Размер данного диапазона должен соответствовать числу строк у первой матрицы и числу столбцов у второй. Клацаем по пиктограмме «Вставить функцию».
  2. Переход в Мастер функций в Microsoft Excel

  3. Активируется Мастер функций. Перемещаемся в блок «Математические», кликаем по наименованию «МУМНОЖ» и клацаем по кнопке «OK» в нижней части окна.
  4. Переход в окно аргументов оператора МУМНОЖ в Microsoft Excel

  5. Будет выполнен запуск окна аргументов требуемой функции. В этом окне имеется два поля для ввода адресов матричных массивов. Ставим курсор в поле «Массив1» и, зажав левую кнопку мыши, выделяем на листе всю область первой матрицы. После этого её координаты отобразятся в поле. Ставим курсор в поле «Массив2» и аналогичным образом выделяем диапазон второй матрицы.

    После того, как оба аргумента внесены, не спешим жать на кнопку «OK», так как мы имеем дело с функцией массива, а это значит, что для получения корректного результата обычный вариант завершения работы с оператором не подойдет. Данный оператор предназначен не для того, чтобы выводить результат в одну ячейку, так как выводит его в целый диапазон на листе. Итак, вместо нажатия кнопки «OK» жмем комбинацию кнопок Ctrl+Shift+Enter.

  6. Окно аргументов функции МУМНОЖ в Microsoft Excel

  7. Как видим, после этого предварительно выделенный диапазон был заполнен данными. Это и есть результат умножения матричных массивов. Если взглянуть на строку формул, после выделения любого из элементов данного диапазона, то мы увидим, что сама формула обернута в фигурные скобки. Это и есть признак функции массива, который добавляется после нажатия сочетания клавиш Ctrl+Shift+Enter перед выводом результат на лист.

Результат умножения матриц с помощью функции МУМНОЖ в Microsoft Excel

Урок: Функция МУМНОЖ в Экселе

Способ 2: использование составной формулы

Кроме того, существует ещё один способ умножения двух матриц. Он более сложный, чем предыдущий, но тоже заслуживает упоминания, как альтернативный вариант. Данный способ предполагает использование составной формулы массива, которая будет состоять из функции СУММПРОИЗВ и вложенного в неё в качестве аргумента оператора ТРАНСП.

Lumpics.ru

  1. На этот раз выделяем на листе только левый верхний элемент массива пустых ячеек, который рассчитываем использовать для вывода результата. Щелкаем по значку «Вставить функцию».
  2. Переход в Мастер функций в программе Microsoft Excel

  3. Мастер функций запускается. Перемещаемся в блок операторов «Математические», но на этот раз выбираем наименование СУММПРОИЗВ. Клацаем по кнопке «OK».
  4. Переход в окно аргументов функции СУММПРОИЗВ в Microsoft Excel

  5. Происходит открытие окна аргументов вышеуказанной функции. Данный оператор предназначен для перемножения различных массивов между собой. Его синтаксис следующий:

    =СУММПРОИЗВ(массив1;массив2;…)

    В качестве аргументов из группы «Массив» используется ссылка на конкретный диапазон, который нужно перемножить. Всего может быть использовано от двух до 255 таких аргументов. Но в нашем случае, так как мы имеем дело с двумя матрицами, нам понадобится как раз два аргумента.

    Ставим курсор в поле «Массив1». Тут нам нужно будет ввести адрес первой строки первой матрицы. Для этого, зажав левую кнопку мыши, нужно просто выделить её на листе курсором. Тут же координаты данного диапазона будут отображены в соответствующем поле окна аргументов. После этого следует зафиксировать координаты полученной ссылки по столбцам, то есть, эти координаты нужно сделать абсолютными. Для этого перед буквами в выражении, которое вписано в поле, устанавливаем знак доллара ($). Перед координатами, отображенными в цифрах (строки), это делать не следует. Также, можно вместо этого выделить всё выражение в поле и трижды нажать на функциональную клавишу F4. В данном случае абсолютными тоже станут лишь координаты столбцов.

  6. Окно аргументов функции СУММПРОИЗВ в Microsoft Excel

  7. После этого устанавливаем курсор в поле «Массив2». С этим аргументом будет посложнее, так как по правилам умножения матриц, вторую матрицу нужно «перевернуть». Для этого используем вложенную функцию ТРАНСП.

    Чтобы перейти к ней, клацаем по значку в виде треугольника, направленного острым углом вниз, который размещен слева от строки формул. Открывается список недавно используемых формул. Если вы в нем найдете наименование «ТРАНСП», то щелкайте по нему. Если же вы давно использовали данный оператор или вообще никогда не применяли его, то в этом списке указанное наименование вы не отыщите. В этом случае требуется нажать по пункту «Другие функции…».

  8. Переход к другим функциям в Microsoft Excel

  9. Открывается уже хорошо знакомое нам окно Мастера функций. На этот раз перемещаемся в категорию «Ссылки и массивы» и выбираем наименование «ТРАНСП». Щелкаем по кнопке «OK».
  10. Переход в окно аргументов функции ТРАНСП в Microsoft Excel

  11. Производится запуск окна аргументов функции ТРАНСП. Данный оператор предназначен для транспонирования таблиц. То есть, попросту говоря, он меняет местами столбцы и строки. Это нам и нужно сделать для второго аргумента оператора СУММПРОИЗВ. Синтаксис функции ТРАНСП предельно простой:

    =ТРАНСП(массив)

    То есть, единственным аргументом данного оператора является ссылка на тот массив, который следует «перевернуть». Вернее, в нашем случае даже не на весь массив, а только на его первый столбец.

    Итак, устанавливаем курсор в поле «Массив» и выделяем первый столбец второй матрицы на листе с зажатой левой кнопкой мыши. Адрес отобразится в поле. Как и в предыдущем случае, тут тоже нужно сделать определенные координаты абсолютными, но на этот раз не координаты столбцов, а адреса строк. Поэтому ставим знак доллара перед цифрами в ссылке, которая отображается в поле. Можно также выделить всё выражение и дважды кликнуть по клавише F4. После того, как нужные элементы стали иметь абсолютные свойства, не жмем на кнопку «OK», а так же, как и в предыдущем способе, применяем нажатие комбинации клавиш Ctrl+Shift+Enter.

  12. Окно аргументов функции ТРАНСП в Microsoft Excel

  13. Но на этот раз у нас заполнился не массив, а только одна ячейка, которую мы ранее выделили при вызове Мастера функций.
  14. Результат обработки функции СУММПРОИЗВ в Microsoft Excel

  15. Нам нужно заполнить данными такой же по размеру массив, как и в первом способе. Для этого следует скопировать формулу, полученную в ячейке, на равнозначный диапазон, который будет равен количеству строк первой матрицы и количеству столбцов второй. В конкретно нашем случае получается три строки и три столбца.

    Для копирования прибегнем к использованию маркера заполнения. Наводим курсор на нижний правый угол ячейки, в которой расположена формула. Курсор преобразуется в черный крестик. Это и есть маркер заполнения. Зажимаем левую кнопку мыши и протягиваем курсор по всему вышеуказанному диапазону. Сама начальная ячейка с формулой должна стать левым верхним элементом данного массива.

  16. Маркер заполнения в Microsoft Excel

  17. Как видим, выделенный диапазон заполнен данными. Если их сравнить с тем результатом, который мы получили благодаря применению оператора МУМНОЖ, то увидим, что значения полностью идентичны. Это означает, что умножение двух матриц выполнено верно.

Результат умножения двух матриц с помощью набора функций в Microsoft Excel

Урок: Работа с массивами в Экселе

Как видим, несмотря на то, что был получен равнозначный результат, использовать функцию для умножения матриц МУМНОЖ значительно проще, чем применять для этих же целей составную формулу из операторов СУММПРОИЗВ и ТРАНСП. Но все-таки данный альтернативный вариант тоже нельзя оставить без внимания при изучении всех возможностей перемножения матриц в Microsoft Excel.

Еще статьи по данной теме:

Помогла ли Вам статья?

Функция МУМНОЖ предназначена для нахождения произведения двух матриц из таблиц Excel по заданным данным. Данную функцию особенно удобно применять при решении задач матричной алгебры.

Как использовать функцию МУМНОЖ в Excel?

Рассмотрим следующий пример. Компания занимается изготовлением ролов на заказ, в состав ассортимента входит четыре вида продукции: рол унаги, филадельфия, зеленый дракон. Предположим нам необходимо решить задачу о затратах на покупку ингредиентов (рис, мягкий сыр, лосось) для планового изготовления ролов. Ниже приведем таблицы А — нормы расхода ингредиентов, B — план выпуска ролов (в штуках).

нормы расхода ингредиентов.

То есть, чтобы нам получить матрицу-строку затрат ингредиентов C, необходимо умножить матрицу B на матрицу А:

план выпуска ролов.

Итоговая размерность матрицы С равна 1×3. Для вычисления элементов матрицы С и для проверки полученных затрат на ингредиенты можно воспользоваться встроенной функцией табличного процессора MS Excel МУМНОЖ.



Функция МУМНОЖ в Excel пошаговая инструкция

  1. Создадим на листе рабочей книги табличного процессора Excel матрицы A и B, как показано на рисунке:
  2. матрицы A и B.

  3. Далее на листе рабочей книги подготовим область для размещения нашего результата — итоговой матрицы С (затраты на ингредиенты в руб.), как показано на рисунке:
  4. итоговой матрицы С.

  5. Выделим диапазон ячеек для элементов матрицы С, т.е. диапазон А5:С5 и вызовем функцию МУМНОЖ категории «Математические», например, по команде «Вставить функцию» (SHIFT+F3), расположенной на вкладке «Формулы».
  6. Математические.

  7. В появившемся окне укажем диапазон соответствующий перемножаемым матрицам, помня о том, что произведение матриц некоммутативно:
  8. диапазон соответствующий перемножаемым матрицам.

  9. Вместо кнопки «Ок», нажмем клавишу F2, а затем — клавиши CTRL+SHIFT+ВВОД. Это делается для того, чтобы получить результат в виде массива, а не одного значения в ячейке А5. Результат на рисунке ниже:
  10. Результат на рисунке.

Таким образом получен следующий результат: затраты на изготовление ролов «унаги» составили 9700 руб., ролов «филадельфия» — 9800 руб., ролов зеленый дракон «8600».

Как найти произведение матрицы по функции МУМНОЖ в Excel

Рассмотрим классический пример из курса матричной алгебры, который будет полезен любому студенту, изучающему высшую математику в Вузе. Предположим необходимо найти произведение матрицы А и вектора столбца:

из курса матричной алгебры.

  1. Создадим на листе рабочей книги табличного процессора Excel матрицы A и B. На листе рабочей книги подготовим область для размещения итоговой матрицы С, как показано на рисунке:
  2. область для размещения итоговой матрицы.

  3. Выделим диапазон ячеек для элементов матрицы С, т.е. диапазон G2:G3 и вызовем функцию МУМНОЖ категории «Математические», например, по команде «Вставить функцию», расположенной на вкладке «Формулы». В появившемся окне укажем диапазон, соответствующий перемножаемым матрицам, помня о том, что произведение матриц некоммутативно:
  4. МУМНОЖ.

  5. Вместо кнопки «Ок», нажмем клавишу F2, а затем — клавиши CTRL+SHIFT+ВВОД. Это делается для того, чтобы получить результат в виде массива, а не одного значения в ячейке. Результат на рисунке ниже:
  6. результат в виде массива.

Рассмотрим еще один «жизненный пример». Каждому человеку необходимо оплачивать коммунальные платежи. Высчитывать сколько и за какой вид услуги платить — довольно трудоемкая задача, поэтому предлагаем ее решить непосредственно при помощи MS Excel, функции МУМНОЖ.

Анализ расходов в Excel с функцией МУМНОЖ

Предположим у нас имеется 3 вида коммунальных платежей: вода, газ, электроэнергия, и соответствующие данные по месяцам (май, июнь, июль) об использовании каждой услуги. Нам необходимо вычислить сколько по каждой услуге и за какой месяц необходимо заплатить.

  1. Составим матрицы А и В. На листе рабочей книги подготовим область для размещения нашего результата — итоговой матрицы С (итоговая стоимость по каждой услуге), как показано на рисунке:
  2. Составим матрицы.

  3. Выделим диапазон ячеек для элементов матрицы С, т.е. диапазон А8:A10 и вызовем функцию МУМНОЖ категории «Математические», например, по команде «Вставить функцию», расположенной на вкладке «Формулы».
  4. Вставить функцию.

  5. В появившемся окне укажем диапазон соответствующий перемножаемым матрицам:
  6. перемножаемым матрицам.

  7. Вместо кнопки «Ок», нажмем клавишу F2, а затем — клавиши CTRL+SHIFT+ВВОД. Это делается для того, чтобы получить результат в виде массива, а не одного значения в ячейке А6. Результат на рисунке ниже:
  8. CTRL+SHIFT+ВВОД.

Таким образом, за воду за 3 месяца мы должны будем заплатить 26 456 руб., за газ — 2697,2 руб., за электроэнергию — 18 661 руб.


В этой статье рассмотрены операции умножения матриц с помощью функции

МУМНОЖ()

или англ.MMULT и с помощью других формул, а также свойства ассоциативности и дистрибутивности операции умножения матриц. Примеры решены в MS EXCEL.


Операция умножения двух матриц

А

и

В

определена только для случаев, когда число столбцов матрицы А равно числу строк матрицы В.

Произведение матрицы

А

порядка P x

N

и матрицы

В

порядка

N

x Q — это такая матрица

С

порядка P x Q, у которой каждый элемент равен сумме произведений элементов

i-ой

строки матрицы

А

на соответствующие элементы

j-ого

столбца матрицы

В

, то есть:

Для умножения матриц в MS EXCEL существует специальная функция

МУМНОЖ()

, которую нужно вводить как

формулу массива

.

Рассмотрим сначала умножение квадратных матриц 2 х 2.

Разместим матрицы в диапазонах

А8:В9

и

D8:E9

(см.

файл примера

).

Результат, также матрицу 2 х 2, будем вводить в диапазон

H8:I9

.

Для этого:

  • выделите указанный диапазон

    H8:I9
  • поставьте курсор в

    Строку формул

    (или нажмите клавишу

    F2

    )

  • введите формулу

    =МУМНОЖ(A8:B9;D8:E9)
  • нажмите

    CTRL+SHIFT+ENTER

Выделенный диапазон заполнится элементами матрицы. В принципе можно выделить заведомо б

о

льший диапазон, в этом случае лишние ячейки будут заполнены ошибкой #Н/Д.

Удалить отдельный элемент матрицы А*В не удастся — только все элементы сразу (выделите весь диапазон и нажмите клавишу

DEL

).

Чтобы изменить значения аргументов функции (например, поменять матрицы местами), выделите любую ячейку матрицы, нажмите

F2

, исправьте формулу и нажмите

CTRL+SHIFT+ENTER

.

Альтернативной формулой для перемножения матриц является

формула массива

=СУММПРОИЗВ($A8:$B8;ТРАНСП(D$8:D$9))

. Введите формулу в верхнюю левую ячейку диапазона и нажмите

CTRL+SHIFT+ENTER

. Затем скопируйте ее вниз и вправо на нужное количество ячеек.

Если попытаться перемножить матрицы неподходящей размерности (когда число столбцов матрицы А НЕ равно числу строк матрицы В), то функция

МУМНОЖ()

вернет ошибку #ЗНАЧ!

В

файле примера

также продемонстрированы свойства ассоциативности и дистрибутивности операции умножения матриц.

Цель работы:
получить
представление о работе с матричными
объектами, изучить встроенные функции
для обработки массивов.

Краткие
теоретические сведения

Электронные таблицы
представляют собой естественную среду
для работы с матрицами, поскольку
в их ячейках удобно размещать матричные
элементы. В Excel термин
матрица (набор значений, упорядоченный
в виде строк и столбцов) и термин вектор
(матрица, состоящая из одной строки
или столбца) заменяются понятием массив
(набор значений, расположенных в виде
строк или столбцов и представляющих
собой единую структуру).

Функции, предназначенные для выполнения
операций с массивами или возвращающие
массивы, называются функциями массива.

В программе Excel
есть возможности для выполнения любой
стандартной матричной операции,
однако эти операции осуществляются
по-разному. Для
сложения (вычитания) двух матриц и
умножения матрицы
на скаляр служат обычные арифметические
функции, производящие
операции с содержимым ячеек. Нахождение
определителя, перемножение и обращение
матриц выполняется с помощью функций
массива.

Функции, предназначенные для выполнения
операций с массивами, располагаются в
категории Математические мастера
функций:

МУМНОЖО – служит для перемножения
двух матриц (две матрицы
можно перемножить при условии, что
количество столбцов первой матрицы
равно количеству строк второй матрицы);

МОБРО – находит обратную матрицу
(обратная матрица существует только
для невырожденной квадратной матрицы);

МОПРЕДО – служит для вычисления
определителя (детерминанта) матрицы. В
качестве аргумента должна использоваться
квадратная матрица.

Практическая
часть

Постановка
задачи

Решить систему уравнений с тремя
неизвестными:

Порядок
выполнения работы

  1. Данную систему уравнений можно записать
    в матричной форме

Ах=b,

где

– матрица
коэффициентов системы;

– вектор
неизвестных;

– правая часть системы.

Решение системы
находится как произведение обратной
матрицы А-1 на
правую часть b:

х=А-1b.

  1. Занесем исходные данные в таблицу (рис.
    28).

Рис. 28. Исходные данные задачи

  1. С помощью функции
    МОБР()
    найдем матрицу, обратную матрице А:

выделим диапазон
для размещения результата (обратной
матрицы) А7:С9
(три строки и три столбца);

в строке формул
запишем {=МОБР(А2:С4)}
или вызовем Мастер функций и выберем
функцию МОБР()
из категории Математические,
введя в качестве аргумента диапазон
А2:С4;

завершим ввод
нажатием комбинации клавиш Ctrl+Shift+Enter.

  1. Умножим обратную матрицу А-1 на правую
    часть системы b:

выделим диапазон
для вывода результата (вектора неизвестных)
Е7:Е9
(три строки и один столбец);

в строке формул
запишем {=МУМНОЖ(А7:С9;Е2:Е4)}
или вызовем Формулы-Вставить
функцию
и
выберем функцию МУМНОЖ()
из категории
Математические,
введя в качестве аргумента Массив1
в диапазон А7:С9,
а Массив2
в диапазон Е2:Е4;

завершим ввод
нажатием комбинации клавиш Ctrl+Shift+Enter.

Рис. 29. Результаты расчета задачи

  1. Таким образом, при
    умножении обратной матрицы А-1
    на правую часть b получили вектор
    неизвестных х (рис. 29).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Три способа умножения матриц в Excel — fastai part-2, lesson-8


  Перевод


  Ссылка на автора

Часть-2 изФастай «Из фондов»наконец-то вышел. Я не помню, когда в последний раз я был так взволнован по поводу MOOC. Как только курс был обнародован, я начал копаться в нем, чтобы углубить свое понимание глубокого обучения и основополагающих концепций.

На этот раз я решил последовать совету Джереми и Рэйчел и написать блоги. Эта конкретная статья объясняетразличные методы умножения матриц,что Джереми реализует в Уроке-8. Я буду использоватьМайкрософт Эксельдля иллюстрации.

Итак, начнем!

Умножение матриц

Отличное и интерактивное место для понимания умножения матриц, на которое ссылается Джереми, доступно по адресу:

matrixmultiplication.xyz

По сути, как видно из изображения, мы берем транспонирование второй матрицы, умножаем и складываем элементы вместе, чтобы получить результат. Как пример, самый первый пункт15в результирующей матрице происходит от1*2 + 6*2 + 1*1 = 2 + 12 + 1 = 15,

Хотя это объяснение визуально приятно, по моему скромному мнению, его трудно преобразовать в код. Так что давайте использовать Excel и понимать матричное умножение по-другому!

Рассмотрим две матрицыа такжеВразмера4x3а также3x4,
Примечание: я буду использовать жирный шрифта такжеВсослаться на матрицы в этой статье. Обычная практика — ссылаться на векторы и матрицы, используя жирный шрифт.

Матрицы А и В

Из изображения, которое мы видели раньше, если вы помните, мы взяли транспонированиеВи умноженные строкис колоннамиВчтобы получить результирующую матрицу. Скорее, давайте пропустим этот шаг, сделав транспонирование на этот раз, и сразу умножим строки и столбцы.

Поэтому строка 0 изумножается на столбец 0Впоэлементные и результирующие поэлементные продукты добавляются для получения первого элемента в результирующей матрицеСв положении[0][0],

Вот как это выглядит в Excel:

C [0] [0] = 1 * 1 + 10 * 5 + 100 * 9 = 1 + 50 + 900 = 951

Точно так же мы получаемC[0][3]поэлементно умножая строку 0 изи кол 3 изB.В Excel это выглядит так:

C [0] [3] = 1 * 4 + 10 * 8 + 100 * 12 = 4 + 80 + 1200 = 1284

И, наконец, мы следуем тому же процессу, чтобы пройти каждый пустой ящик вСчтобы получить окончательный результат.

C [3] [3] = 4 * 4 + 40 * 8 + 400 * 12 = 16 + 320 + 4800 = 5136

Вот и мы! Вот так мы делаем матричное умножение! Это было легко, не так ли? Мы теперь не только поняли умножение матриц, но и внедрили его в Excel! Как это круто?

Я лично считаю, что теперь вы готовы работать с некоторыми правилами, связанными с умножением матрицMatMul):

  1. Позволятьar,acбыть количеством строк и столбцов вA.Точно так же, пустьbr, bcбыть количеством строк и столбцов вB.Тогда для выполнения умножения матриц необходимо, чтобыac == br, Зачем? Итак, как вы видели в Excel, мы умножили строки и столбцы поэлементно, а затем добавили промежуточные продукты, чтобы получить конечный результат. Если есть несоответствие в размерах, и один вектор длиннее другого, мы больше не можем выполнять поэлементное умножение!
  2. Размеры результирующей матрицы всегда будутar,bc, То есть количество строк исходит оти количество столбцов исходит отB.

Способ 1: использование 3-х циклов FOR

Вот еще один отказ от ответственности, при реализации умножения матриц в Excel, мы не только поняли это, но и повторили первый метод Джереми, который использовал 3 цикла FOR. Вот как это выглядит в коде:

def matmul1(a,b):
ar,ac = a.shape
br,bc = b.shape
assert ac==br
c = torch.zeros(ar, bc)
for i in range(ar):
for j in range(bc):
for k in range(ac): #or br
c[i,j] += a[i,k]*b[k,j]
return c

Надеюсь, теперь вы сможете лучше понять это. Если нет, то сейчас самое время сделать паузу, поэкспериментировать с кодом и посмотреть, что на самом деле происходит. Я обещаю вам, это так же, как наша версия Excel!

Хорошо, я предполагаю, что вы потратили некоторое время на размышления о коде, поэтому давайте обсудим это!

  • Почему первые две петли вrange(ar) а такжеrange(bc)? Ну, как вы помните изПравило-2наша результирующая матрица будет иметь размерыar,bc, И из Excel мы увидели, что мы пересекаем каждый элементСследовательно, один за другим, чтобы пройтиarстроки иbcстолбцы нам нужно 2 цикла вrange(ar) а такжеrange(bc),
  • Итак, почему третий цикл FOR вrange(ac) #or br? Ну изПравило-1, мы знаем этоac==brтак что на самом деле не имеет значения, ставим ли мыrange(ac)илиrange(br)в третьем цикле. По сути, именно здесь отдельные элементы умножаются вместе и добавляются. Из нашего предыдущего примера Excel, дляC[0][0]это где шагC[0][0] = 1*1 + 10*5 + 100*9 = 1 + 50 + 900 = 951произойдет, и, наконец, мы перейдем к следующей коробке. Количество предметов, которые умножаются и складываются вместе, равноac or br,

Это действительно так! Это метод-1 для вас! Вот песня, чтобы помнить Матричное Умножение. (Я узнал об этом первым из fast.ai, оригинальный автор неизвестен)

Надеюсь, теперь вы понимаете, как две матрицы умножаются друг на друга. Если не, Вот это еще один учебник Хан Академии

Метод 2: Использование поэлементного умножения

Так что до сих пор мы разбираем каждую позицию в результирующей матрицеC,найти отдельные элементы, а затем суммировать их вместе. Если вы помните, что-то вродеC[0][0] = 1*1 + 10*5 + 100*9 = 1 + 50 + 900 = 951, Конечно, должен быть другой путь? Что если вместо того, чтобы делать отдельные продукты, а затем суммировать их, мы умножаем векторы за один раз, чтобы получить результирующий вектор, и суммируем полученный вектор, чтобы получить конечный элемент?

m = tensor([1, 2, 3])
n = tensor([10, 10, 10])
m*n>>tensor([10, 20, 30])

До сих пор мы находили отдельные продукты10, 20, 30и сложить их вместе10 + 20 + 30 = 60, Но, действительно, все это можно заменить на:

m = tensor([1, 2, 3])
n = tensor([10, 10, 10])
(m*n).sum()>>tensor(60)

Если вы помните, самый внутренний цикл вrange(ac) #or brнаходил отдельные продукты и добавлял их. Ну, мы можем заменить этот цикл, чтобы выполнить векторное поэлементное произведение и положить.sum()в конце концов, и PyTorch / NumPy имеют возможность выполнять поэлементные операции для нас!

Вот как это выглядит в Excel:

C [0] [0] = сумма (A [строка 0] * B [столбец 0])

Точно так же мы получаемC[0][3]путем умножения вектора в строке 0с вектором на цв 3Ви суммируя полученный вектор.

C [0] [3] = сумма (A [строка 0] * B [столбец 3])

И, наконец, мы следуем тому же процессу, чтобы пройти каждый пустой ящик вСчтобы получить окончательный результат.

C [3] [3] = сумма (A [строка 3] * B [столбец 3])

Обратите внимание, как это отличается отМетод-1? На этот раз мы просто говорим Excel или PyTorch: умножьте строку 0с col 0 изВи суммируем полученный вектор, чтобы дать нам ответ. Вместо того чтобы делать1*1 + 10*5 + 100*9, Например, дляC[0][0]этот метод умножает Vector на строку 0tensor([1,10,100])с вектором в столбце 0 изВtensor{[1,5,9])чтобы получить промежуточный продукт Векторtensor([1,50,900])и суммирует это, чтобы дать результат в положенииC[0][0]какtensor(951),

В коде это выглядит так:

def matmul2(a,b):
ar,ac = a.shape
br,bc = b.shape
assert ac==br
c = torch.zeros(ar,bc)
for i in range(ar):
for j in range(bc):
c[i,j] = (a[i,:]*b[:,j]).sum()
return c

Таким образом, мы просто анализируем каждую позициюC,используя две петли FOR и введите соответствующий результат в этой позиции. Еслиi,jпредставляют строки и столбцы вСэто выглядит примерно так …

i:0,j:0
a:tensor([ 1, 10, 100]),b:tensor([1, 5, 9])
tensor([[951., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
---
i:0,j:1
a:tensor([ 1, 10, 100]),b:tensor([ 2, 6, 10])
tensor([[ 951., 1062., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
---
i:0,j:2
a:tensor([ 1, 10, 100]),b:tensor([ 3, 7, 11])
tensor([[ 951., 1062., 1173., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
---
i:0,j:3
a:tensor([ 1, 10, 100]),b:tensor([ 4, 8, 12])
tensor([[ 951., 1062., 1173., 1284.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
---
i:1,j:0
a:tensor([ 2, 20, 200]),b:tensor([1, 5, 9])
tensor([[ 951., 1062., 1173., 1284.],
[1902., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])

И так далее .. пока мы не получим полную матрицуС,

tensor([[ 951., 1062., 1173., 1284.],
[1902., 2124., 2346., 2568.],
[2853., 3186., 3519., 3852.],
[3804., 4248., 4692., 5136.]])

Метод 3: вещание

Заметили общую тему здесь? Каждый раз мы должны умножить каждый рядс каждым столбцомВполучитьС, Вы замечаете повторение? Мы умножаем один и тот же вектор строки вbcраз! И мы повторяем этот процессarраз!

Есть ли способ умножить вектор строкисо всеми столбцамиВполучить соответствующий ряд вC?Да, есть! Войдите в трансляцию …
Примечание: я не буду объяснять вещание, Джереми делает это очень хорошо Вот,

Вместо этого давайте посмотрим, что это за волшебный кусок кода

for i in range(ar):
c[i] = (a[i,:].unsqueeze(-1).expand_as(b)*b).sum(dim=0)

Как обычно, давайте повторим в Excel! Это сделает вещи действительно легкими. Давайте сделаем это поэтапно.

Шаг 1)Выберите i-й рядa[i,:], Мы выбираем строку 0 в качестве примера.

Выберите строку 0 из

Шаг 2)Возьмите егоТранспонированиеa[i,:].unsqueeze(-1)

Возьмите транспонирование строки 0 из A

Шаг 3)Развернуть матрицу столбца какВa[i,:].unsqueeze(-1).expand_as(b)

Развернуть матрицу столбца как B

Шаг-4)Элемент мудрый умножить наВa[i,:].unsqueeze(-1).expand_as(b)*b

Умножить элемент на B

Шаг-5)Суммируйте по строкам, чтобы получить строку 0 C

Суммируйте по измерению боковой строки, чтобы получить строку 0 C

Полный процесс вещания для каждого рядавыглядит примерно так:

Вещание в целом

Я надеюсь, что теперь вы получитевещания!Итак, давайте посмотрим, как это выглядит в коде ..

def matmul3(a,b):
ar,ac = a.shape
br,bc = b.shape
assert ac==br
c = torch.zeros(ar,bc)
for i in range(ar):
c[i] = (a[i,:].unsqueeze(-1).expand_as(b)*b).sum(dim=0)
print(f"i:{i}")
print(c)
return c

Вывод выглядит так:

i:0
tensor([[ 951., 1062., 1173., 1284.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
i:1
tensor([[ 951., 1062., 1173., 1284.],
[1902., 2124., 2346., 2568.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
i:2
tensor([[ 951., 1062., 1173., 1284.],
[1902., 2124., 2346., 2568.],
[2853., 3186., 3519., 3852.],
[ 0., 0., 0., 0.]])
i:3
tensor([[ 951., 1062., 1173., 1284.],
[1902., 2124., 2346., 2568.],
[2853., 3186., 3519., 3852.],
[3804., 4248., 4692., 5136.]])

Это именно то, как мы ожидаем, что это будет так же, как нашиВерсия Excel!

Вот и все! Мы успешно рассмотрели три метода умножения матриц, включая вещание.

Google лист для вышеупомянутой иллюстрации можно найти Вот, Спасибо за чтение! Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь обращаться ко мне по адресу https://linkedin.com/in/aroraaman/,

Понравилась статья? Поделить с друзьями:
  • Умножение матриц на матрицу excel
  • Умножение матриц vba excel
  • Умножение массива на число в excel
  • Умножение массива на массив в excel
  • Умножение если в excel примеры