मेरे पास मूल्यों के दो वैक्टर और वजन के एक वेक्टर हैं, और मुझे कोसाइन समानता की गणना करने की आवश्यकता है। जटिल कारणों से, मैं एक समय में केवल एक जोड़ी के लिए कोसाइन की गणना कर सकता हूं। लेकिन मुझे इसे कई लाख बार करना है।सबसे कुशल आर कोसाइन गणना
cosine_calc <- function(a,b,wts) {
#scale both vectors by the weights, then compute the cosine of the scaled vectors
a = a*wts
b = b*wts
(a %*% b)/(sqrt(a%*%a)*sqrt(b%*%b))
}
काम करता है, लेकिन मैं इससे बेहतर प्रदर्शन करने की कोशिश करना चाहता हूं।
उदाहरण डेटा:
a = c(-1.2092420, -0.7053822, 1.4364633, 1.3612304, -0.3029147, 1.0319704, 0.6707610, -2.2128987, -0.9839970, -0.4302205)
b = c(-0.69042619, 0.05811749, -0.17836802, 0.15699691, 0.78575477, 0.27925779, -0.08552864, -1.31031219, -1.92756861, -1.36350112)
w = c(0.26333839, 0.12803180, 0.62396023, 0.37393705, 0.13539926, 0.09199102, 0.37347546, 1.36790007, 0.64978409, 0.46256891)
> cosine_calc(a,b,w)[,1]
[1,] 0.8390671
यह question बताते अन्य पूर्वनिर्धारित कोज्या आर में उपलब्ध कार्यों देखते हैं कि, लेकिन उनके सापेक्ष दक्षता के बारे में कुछ भी नहीं कहना है।
केवल यह एक समय में एक जोड़ी करने के लिए सक्षम किया जा रहा है एक प्रमुख अड़चन होने जा रहा है ... –
मैं तुम्हें करने के लिए इसे तोड़ने के लिए नफरत है, लेकिन मेरे अनुभव में, अनुसंधान के लिए निर्मित किया जाना प्रतीत नहीं होता प्रदर्शन (अपेक्षाकृत बोलना)। यदि यह डेटा एक रिलेशनल डेटाबेस से है, तो आप वहां समानताएं कंप्यूटिंग पर विचार करना चाहेंगे और फिर आर को निर्यात कर सकते हैं। मैं जो कुछ भी आर का उपयोग करता हूं वह छोटे पैमाने पर विश्लेषण है (यानी डेटा सेट पर मैंने महत्वपूर्ण मात्रा में काम किया है एकत्रीकरण) और ग्राफिक्स का उत्पादन। –
आप आगे क्यों नहीं जाते हैं और http://stackoverflow.com/questions/2535234/find-cosine-similarity-in-r/2536149#2536149 (यानी आपके द्वारा लिंक किया गया प्रश्न; @ जोशउलिच आपको दिखाता है) में सूचीबद्ध उदाहरणों का बेंचमार्क क्यों नहीं करते हैं उसके जवाब में कैसे) और खुद के लिए देखें? –