मुझे नियमित रूप से समय श्रृंखला (विशेष रूप से साधन) की रोलिंग चीजें मिलती हैं, और यह जानकर आश्चर्य हुआ कि rollmean
rollapply
से काफी तेज़ है, और align = 'right'
विधियां rollmeanr
रैपर से तेज हैं।रोलमेली (कोड-वार) से रोलमैन को तेज़ी से क्या बनाता है?
उन्होंने इस गति को कैसे हासिल किया है? और rollmeanr()
रैपर का उपयोग करते समय इनमें से कुछ क्यों खो देते हैं?
कुछ पृष्ठभूमि: मैं rollapplyr(x, n, function(X) mean(X))
का उपयोग कर रहा था, हालांकि हाल ही में मैंने कुछ उदाहरणों पर rollmean
का उपयोग किया था। दस्तावेज rollapplyr(x, n, mean)
(function
तर्क के भाग के बिना नोट) rollmean
का उपयोग करते हैं, इसलिए मुझे नहीं लगता कि प्रदर्शन में बहुत अंतर आएगा, हालांकि rbenchmark
उल्लेखनीय मतभेदों का खुलासा किया।
require(zoo)
require(rbenchmark)
x <- rnorm(1e4)
r1 <- function() rollapplyr(x, 3, mean) # uses rollmean
r2 <- function() rollapplyr(x, 3, function(x) mean(x))
r3 <- function() rollmean(x, 3, na.pad = TRUE, align = 'right')
r4 <- function() rollmeanr(x, 3, align = "right")
bb <- benchmark(r1(), r2(), r3(), r4(),
columns = c('test', 'elapsed', 'relative'),
replications = 100,
order = 'elapsed')
print(bb)
मैं खोजने के लिए कि rollmean(x, n, align = 'right')
विशेष रूप से तेजी से था हैरान था - और मेरे rollapply(x, n, function(X) mean(X))
दृष्टिकोण से ~ 40x तेजी से।
test elapsed relative
3 r3() 0.74 1.000
4 r4() 0.86 1.162
1 r1() 0.98 1.324
2 r2() 27.53 37.203
अंतर-डेटा के आकार के आकार के रूप में अंतर बड़ा लगता है। मैंने उपर्युक्त कोड में केवल x
(rnorm(1e5)
) का आकार बदल दिया और परीक्षण को फिर से चलाया और कार्यों के बीच एक बड़ा अंतर भी था।
test elapsed relative
3 r3() 13.33 1.000
4 r4() 17.43 1.308
1 r1() 19.83 1.488
2 r2() 279.47 20.965
और x <- rnorm(1e6)
test elapsed relative
3 r3() 44.23 1.000
4 r4() 54.30 1.228
1 r1() 65.30 1.476
2 r2() 2473.35 55.920
कैसे के लिए वे इस किया है? इसके अलावा, क्या यह इष्टतम समाधान है? निश्चित रूप से, यह तेज़ है लेकिन क्या ऐसा करने के लिए भी तेज तरीका है?
: - क्योंकि पहले एक गणना करने के लिए आसान है (ध्यान दें सामान्य रूप में अपने समय श्रृंखला लगभग हमेशा xts
वस्तुओं रहे हैं इस फर्क पड़ता है?)
आप 'बहुत तेजी के लिए' caTools' से runmean' प्रयास कर सकते हैं परिणाम – eddi
@DWIN मैं मदद पेज पढ़ें था। मैंने आपके द्वारा उद्धृत पाठ को 'रोलप्लेयर' में उद्धृत किया है लेकिन यह क्यों नहीं समझाता है। इसके बाद मैं 'रोलमेन' गया और पाया "ये कार्य क्रमशः रोलिंग का मतलब है, अधिकतम और औसत क्रमशः और 'रोलप्ली' के समान हैं लेकिन गति के लिए अनुकूलित हैं" ... जो कि क्यों नहीं समझाता है। इसके अतिरिक्त, न तो बताता है कि 'रोलमेन (एक्स, एन, एलाइन =' दाएं ') 'रोलमेनर (एक्स, एन)' से तेज क्यों है। अंत में, इनमें से कोई भी बताता है कि डेटा के आकार के साथ प्रदर्शन अंतराल क्यों बढ़ता है। – ricardo
"क्यों" के लिए पर्याप्त स्पष्टीकरण का गठन करता है? जवाब की "गति की आवश्यकता" कैसे नहीं है? –