Как вычислить косинусное сходство с помощью двух матриц
У меня есть две матрицы: 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?
1 ответ:
Самым простым решением было бы вычисление норм сначала с помощью поэлементного умножения и суммирования вдоль требуемых размеров:
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);