Найти в Дзене
ЦифроПроф

Умножение и транспонирование матриц

Умножение матрицы на вектор Чтобы понять, как матрица умножается на вектор, возьмём список строк. Каждая строка этого списка (матрицы) скалярно умножается на вектор, а полученные числа образуют новый вектор. Например, матрицу 𝐴 размера 𝑚×𝑛 умножим на вектор b (n-мерный). Произведением будет новый вектор c=𝐴b. Это 𝑚-мерный вектор, у которого 𝑖-я координата равна скалярному произведению i-й строки матрицы на b. Чтобы умножение было корректным, размер вектора должен быть равен ширине матрицы. Рассмотрим пример. Мобильный оператор «Шмеляйн» предлагает пакеты услуг: «За рулём» и «В метро». Каждый действует месяц и состоит из минут разговора, количества СМС и мегабайтов интернет-трафика. Рассчитаем количество минут разговора, СМС и объём интернет-трафика, которые потратил за месяц клиент №1. import numpy as np
import pandas as pd
services = ['Минуты', 'СМС', 'Мбайты']
packs_names = ['«За рулём»', '«В метро»']
packs = np.array([
[20, 5],
[2, 5],
[500, 1000]])
clients_pack
Фото автора
Фото автора

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

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

Например, матрицу 𝐴 размера 𝑚×𝑛 умножим на вектор b (n-мерный). Произведением будет новый вектор c=𝐴b. Это 𝑚-мерный вектор, у которого 𝑖-я координата равна скалярному произведению i-й строки матрицы на b.

Чтобы умножение было корректным, размер вектора должен быть равен ширине матрицы.

Рассмотрим пример. Мобильный оператор «Шмеляйн» предлагает пакеты услуг: «За рулём» и «В метро». Каждый действует месяц и состоит из минут разговора, количества СМС и мегабайтов интернет-трафика.

Рассчитаем количество минут разговора, СМС и объём интернет-трафика, которые потратил за месяц клиент №1.

import numpy as np
import pandas as pd

services = ['Минуты', 'СМС', 'Мбайты']
packs_names = ['«За рулём»', '«В метро»']
packs = np.array([
[20, 5],
[2, 5],
[500, 1000]])

clients_packs = np.array([
[1, 2],
[2, 3],
[4, 1],
[2, 3],
[5, 0]])

client = 1
print('Пакеты клиента')
print(pd.DataFrame(clients_packs[client], index=packs_names, columns=['']))
print()

client_vector = clients_packs[1, :]
client_services = np.dot(packs, client_vector)

print("Минуты, СМС, Мбайты")
print(client_services)

Транспонирование матрицы (англ. transpose) — это её «переворот» относительно главной диагонали матрицы, которая идёт из левого верхнего в правый нижний угол. При таком перевороте матрицы А размера 𝑚×𝑛 трансформируется в матрицу размера 𝑛×𝑚. То есть строки матрицы становятся её столбцами, а столбцы — строками. Транспонированная матрица обозначается верхним индексом T.

Рассмотрим пример. На фабрике «Дубинка и Сосёнка» производят мебель из древесной плиты. В изготовлении также нужны металлические трубы (ножки и крепления) и винты. Чтобы произвести один стул, скамью и стол, требуется материалов в таком количестве:

Предмет Плита, листов Труба, м Винт, кол-во
Стул 0.2 1.2 8
Скамья 0.5 0.8 6
Стол 0.8 1.6 8

Вычислим, сколько понадобится материалов, чтобы произвести 16 столов, 60 стульев и 4 скамьи.

import numpy as np
import pandas as pd

materials_names = ['Древесная плита', 'Металлическая труба', 'Винты']

# англ. производство
manufacture = np.array([
[0.2, 1.2, 8],
[0.5, 0.8, 6],
[0.8, 1.6, 8]])

# англ. мебель
furniture = [60, 4, 16]

materials = np.dot(manufacture.T, furniture)

print(pd.DataFrame([materials], index=[''], columns=materials_names))