2013-01-15 10 views
5

का उपयोग कर कोसाइन समानता की गणना कैसे करें मेरे पास दो matrices, ए (आयाम एम एक्स एन) और बी (एन एक्स पी) है। वास्तव में, वे ए में पंक्ति वैक्टर हैं, बी में कॉल वैक्टर, बी में मैं प्रत्येक जोड़ी a और b के लिए कोसाइन समानता स्कोर प्राप्त करना चाहता हूं, जहां a मैट्रिक्स ए से एक वेक्टर (पंक्ति) है और b एक वेक्टर है (कॉलम) मैट्रिक्स बी सेदो matrices

मैंने मैट्रिक्स को गुणा करके शुरू किया है, जिसके परिणामस्वरूप मैट्रिक्स C (आयाम एम एक्स पी) होता है।

सी = एक * बी

हालांकि, कोज्या समानता स्कोर प्राप्त करने के लिए, मैं दो इसी वैक्टर की आदर्श द्वारा प्रत्येक मान C(i,j) विभाजित करने के लिए की जरूरत है। क्या आप Matlab में ऐसा करने का सबसे आसान तरीका सुझा सकते हैं?

+0

कैसे के बारे में http://octave.sourceforge.net/statistics/function/pdist.html? – Nemo

उत्तर

5

सरल समाधान कंप्यूटिंग मानदंडों पहले वांछित आयामों के साथ तत्व के लिहाज से गुणा और योग का उपयोग कर होगा:

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); 
+0

बहुत बहुत धन्यवाद, लेकिन मुझे लगता है कि मानदंडों के वर्ग रूट का उपयोग किया जाना चाहिए। –

+0

@ जॉन मणक आह हाँ, मैं इसे भूल गया। फिक्स्ड। –

संबंधित मुद्दे