से छुटकारा पा रहा है मैं अपनी गणना तेज करना चाहता हूं और फ़ंक्शन m
में लूप का उपयोग किए बिना परिणाम प्राप्त करना चाहता हूं। प्रतिलिपि प्रस्तुत करने योग्य उदाहरण:आर: लूप और तेज़ कोड
N <- 2500
n <- 500
r <- replicate(1000, sample(N, n))
m <- function(r, N) {
ic <- matrix(0, nrow = N, ncol = N)
for (i in 1:ncol(r)) {
p <- r[, i]
ic[p, p] <- ic[p, p] + 1
}
ic
}
system.time(ic <- m(r, N))
# user system elapsed
# 6.25 0.51 6.76
isSymmetric(ic)
# [1] TRUE
for
पाश हम मैट्रिक्स वेक्टर नहीं साथ काम कर रहे के हर यात्रा में, तो यह कैसे vectorized जा सकता है?
@ joel.wilson इस फ़ंक्शन का उद्देश्य तत्वों की जोड़ी आवृत्तियों की गणना करना है। तो बाद में हम pairwise समावेश संभावनाओं का अनुमान लगा सकते हैं।
@ खशा और @alexis_laz के लिए धन्यवाद। मानक:
> require(rbenchmark)
> benchmark(m(r, N),
+ m1(r, N),
+ mvec(r, N),
+ alexis(r, N),
+ replications = 10, order = "elapsed")
test replications elapsed relative user.self sys.self user.child sys.child
4 alexis(r, N) 10 4.73 1.000 4.63 0.11 NA NA
3 mvec(r, N) 10 5.36 1.133 5.18 0.18 NA NA
2 m1(r, N) 10 5.48 1.159 5.29 0.19 NA NA
1 m(r, N) 10 61.41 12.983 60.43 0.90 NA NA
vectorized जा सकती है, मूल है क्या समारोह का उद्देश्य? क्या आप इसे समझा सकते हैं! –
एक मैट्रिक्स आयाम वाले वेक्टर है। – Tensibai
यदि गति आपकी चिंता है, तो आपको लागू कार्यों का उपयोग करने पर विचार करना चाहिए। – Ansjovis86