Как вычислить подобие косинуса с использованием двух матриц

109
14

У меня две матрицы: A (размеры M x N) и B (N x P). На самом деле, это совокупности векторов - векторов строк в A, векторы столбцов в B. Я хочу получить оценки подобия косинуса для каждой пары a и b, где a - вектор (строка) из матрицы A и b - вектор (столбец) из матрицы B.


Я начал с умножения матриц, что приводит к матрице C (размеры M x P).


C = A * B



Однако, чтобы получить оценки подобия косинуса, мне нужно разделить каждое значение C(i,j) на норму двух соответствующих векторов. Не могли бы вы предложить самый простой способ сделать это в Matlab?

спросил(а) 2021-01-25T11:30:38+03:00 4 месяца, 3 недели назад
1
Решение
108

Простейшим решением было бы вычисление норм сначала с использованием умножения по элементам и суммирования по требуемым размерам:


normA = sqrt(sum(A .^ 2, 2));
normB = sqrt(sum(B .^ 2, 1));

normA и normB теперь являются вектором столбца и вектором строки соответственно. Чтобы разделить соответствующие элементы в A * B на normA и normB, используйте bsxfun так:


C = bsxfun(@rdivide, bsxfun(@rdivide, A * B, normA), normB);

ответил(а) 2021-01-25T11:30:38+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема