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