में एक बिंदु और अंक के समूह के बीच सभी दूरी की गणना करना सबसे पहले, मैं आर (मैंने कल शुरू किया) में नया हूं।आर
मैं आकार n
के पहले एक और आकार K
की दूसरी दो अंक के समूहों, data
और centers
, (उदाहरण के लिए, n = 3823
और K = 10
) है, और पहले सेट में प्रत्येक i
के लिए, मैं j
खोजने की जरूरत है न्यूनतम दूरी के साथ दूसरे में। मैं केवल which.min(dist)
उपयोग करने के लिए मैं क्या देख रहा हूँ खोजने की जरूरत है, के लिए प्रत्येक i
, dist[j]
i
और j
के बीच की दूरी रहने दो:
मेरा विचार सरल है।
प्रत्येक बिंदु 64
युगल की एक सरणी, इसलिए
> dim(data)
[1] 3823 64
> dim(centers)
[1] 10 64
मैं (, यह 40 से अधिक लेता है !! n = 200
साथ)
for (i in 1:n) {
for (j in 1:K) {
d[j] <- sqrt(sum((centers[j,] - data[i,])^2))
}
S[i] <- which.min(d)
}
जो बेहद धीमी गति से है के साथ की कोशिश की है है। सबसे तेजी से समाधान है कि मैंने लिखा
distance <- function(point, group) {
return(dist(t(array(c(point, t(group)), dim=c(ncol(group), 1+nrow(group)))))[1:nrow(group)])
}
for (i in 1:n) {
d <- distance(data[i,], centers)
which.min(d)
}
यहां तक कि अगर यह गणना है कि मैं (क्योंकि dist(m)
m
की सभी पंक्तियों के बीच की दूरी की गणना करता है) का उपयोग नहीं करते की एक बहुत कुछ करता है, जिस तरह से अधिक एक दूसरे की तुलना में तेजी है (क्या कोई बता सकता है क्यों?), लेकिन यह मेरी जरूरत के लिए पर्याप्त तेज़ नहीं है, क्योंकि इसका उपयोग केवल एक बार नहीं किया जाएगा। और, distance
कोड बहुत बदसूरत है। मैंने इसे
distance <- function(point, group) {
return (dist(rbind(point,group))[1:nrow(group)])
}
के साथ बदलने की कोशिश की लेकिन यह दो बार धीमा लगता है। मैंने प्रत्येक जोड़ी के लिए dist
का उपयोग करने की भी कोशिश की, लेकिन यह भी धीमी है।
मुझे नहीं पता कि अब क्या करना है। ऐसा लगता है कि मैं कुछ गलत कर रहा हूँ। इस बारे में कोई विचार अधिक कुशलतापूर्वक कैसे करें?
ps: मुझे हाथ से के-साधन लागू करने की आवश्यकता है (और मुझे यह करने की ज़रूरत है, यह असाइनमेंट का हिस्सा है)। मेरा मानना है कि मुझे केवल यूक्लिडियन दूरी की आवश्यकता होगी, लेकिन मुझे अभी तक यकीन नहीं है, इसलिए मैं कुछ कोड रखना पसंद करूंगा जहां दूरी गणना को आसानी से बदला जा सकता है। stats::kmeans
एक सेकंड से भी कम समय में सभी गणना करें।
लोग 'दौर यहां तरह-एक-इसे की तरह कर कार्य ... इसलिए एक विशिष्ट समस्या पर ध्यान केंद्रित करने की कोशिश करो। – aL3xa