2013-01-15 42 views
5

Tôi có hai ma trận, A (kích thước M x N) và B (N x P). Trong thực tế, chúng là các bộ sưu tập vectơ - vectơ hàng trong A, vectơ cột trong B. Tôi muốn có điểm số tương tự cosin cho mỗi cặp ab, trong đó a là một vectơ (hàng) từ ma trận A và b là một vectơ (cột) từ ma trận B.Cách tính độ tương tự cosin bằng hai ma trận

Tôi đã bắt đầu bằng cách nhân các ma trận, dẫn đến ma trận C (kích thước M x P).

C = A * B

Tuy nhiên, để có được điểm tương đồng cosin, tôi cần phải chia mỗi giá trị C(i,j) bởi các chuẩn mực của hai vectơ tương ứng. Bạn có thể đề xuất cách dễ nhất để làm điều này trong Matlab?

+0

Làm thế nào về http://octave.sourceforge.net/statistics/function/pdist.html? – Nemo

Trả lời

5

Giải pháp đơn giản nhất sẽ tính toán các chỉ tiêu đầu tiên sử dụng nhân tố khôn ngoan và tổng kết dọc theo kích thước mong muốn:

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

normAnormB bây giờ là một vector cột và hàng vector, tương ứng. Để chia các yếu tố trong A * B tương ứng bởi normAnormB, sử dụng bsxfun như vậy:

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

Cảm ơn rất nhiều, nhưng tôi nghĩ rằng căn bậc hai của các chuẩn mực nên được sử dụng. –

+0

@JohnManak Ah vâng, tôi quên điều đó. Đã sửa. –

Các vấn đề liên quan