अद्यतन का उपयोग करके यादृच्छिक अंतराल डेटासेट से निश्चित अंतराल डेटासेट बनाएं अद्यतन: मैंने प्रश्न पाठ के निचले हिस्से में तीन उत्तरों का संक्षिप्त विश्लेषण प्रदान किया है और मेरे विकल्पों को समझाया है।स्टेल डेटा
मेरा प्रश्न: स्टेल डेटा का उपयोग कर यादृच्छिक अंतराल डेटासेट से एक निश्चित अंतराल डेटासेट बनाने का सबसे प्रभावी तरीका क्या है?
कुछ पृष्ठभूमि: उपरोक्त आंकड़ों में एक आम समस्या है। अक्सर, किसी को यादृच्छिक समय पर होने वाले अवलोकनों का अनुक्रम होता है। इसे Input
पर कॉल करें। लेकिन हर 5 मिनट में कहने वाले अवलोकनों का अनुक्रम चाहता है। इसे Output
पर कॉल करें। इस डेटासेट को बनाने के लिए सबसे आम तरीकों में से एक स्टेल डेटा का उपयोग कर रहा है, यानी Output
में प्रत्येक अवलोकन को Input
में हाल ही में होने वाले अवलोकन के बराबर सेट करें।
TInput = 100;
TOutput = 50;
InputTimeStamp = 730486 + cumsum(0.001 * rand(TInput, 1));
Input = [InputTimeStamp, randn(TInput, 1)];
OutputTimeStamp = 730486.002 + (0:0.001:TOutput * 0.001 - 0.001)';
Output = [OutputTimeStamp, NaN(TOutput, 1)];
दोनों डेटासेट सहस्राब्दी के मोड़ पर आधी रात के करीब से शुरू:
तो, यहाँ उदाहरण डेटासेट का निर्माण करने के लिए कुछ कोड है। हालांकि, Input
में टाइमस्टैम्प यादृच्छिक अंतराल पर होते हैं जबकि Output
में टाइमस्टैम्प निश्चित अंतराल पर होते हैं। सादगी के लिए, मैंने यह सुनिश्चित किया है कि Input
में पहला अवलोकन हमेशा Output
में पहले अवलोकन से पहले होता है। किसी भी जवाब में इस धारणा को बनाने के लिए स्वतंत्र महसूस करें।
sMax = size(Output, 1);
tMax = size(Input, 1);
s = 1;
t = 2;
%#Loop over input data
while t <= tMax
if Input(t, 1) > Output(s, 1)
%#If current obs in Input occurs after current obs in output then set current obs in output equal to previous obs in input
Output(s, 2:end) = Input(t-1, 2:end);
s = s + 1;
%#Check if we've filled out all observations in output
if s > sMax
break
end
%#This step is necessary in case we need to use the same input observation twice in a row
t = t - 1;
end
t = t + 1;
if t > tMax
%#If all remaining observations in output occur after last observation in input, then use last obs in input for all remaining obs in output
Output(s:end, 2:end) = Input(end, 2:end);
break
end
end
निश्चित रूप से वहाँ है एक अधिक कुशल, या कम से कम, और अधिक सुरुचिपूर्ण इस समस्या को हल करने के लिए जिस तरह से:
वर्तमान में, मैं इस तरह की समस्या का समाधान? जैसा कि मैंने उल्लेख किया है, यह आंकड़ों में एक आम समस्या है। शायद मैटलैब में कुछ अंतर्निहित कार्य है, मुझे पता नहीं है? किसी भी मदद की बहुत सराहना की जाएगी क्योंकि मैं इस दिनचर्या का उपयोग कुछ बड़े डेटासेट के लिए बहुत कम करता हूं।
उत्तर: हाय सब, मैंने तीन उत्तरों का विश्लेषण किया है, और जैसा कि वे खड़े हैं, Angainor सबसे अच्छा है।
चथोनिक डेमॉन का जवाब, जबकि स्पष्ट रूप से लागू करने के लिए सबसे आसान, वास्तव में धीमा है। यह तब भी सही है जब timeseries
ऑब्जेक्ट का रूपांतरण स्पीड टेस्ट के बाहर किया जाता है। मुझे लगता है कि इस समय resample
फ़ंक्शन का बहुत अधिक ओवरहेड है। मैं 2011 बी चला रहा हूं, इसलिए यह संभव है कि गणित ने मध्यवर्ती समय में इसे सुधार लिया हो। इसके अलावा, इस विधि को Output
Input
के बाद एक से अधिक अवलोकन समाप्त होने के लिए एक अतिरिक्त पंक्ति की आवश्यकता है।
रोडी का जवाब केवल एंजैनोर की तुलना में थोड़ा धीमा चलता है (असुरक्षित यह दोनों histc
दृष्टिकोण को नियोजित करते हैं), हालांकि, इसमें कुछ समस्याएं हैं। सबसे पहले, Output
में अंतिम अवलोकन को निर्दिष्ट करने की विधि Output
में अंतिम अवलोकन के बाद Input
में अंतिम अवलोकन के लिए मजबूत नहीं है। यह एक आसान फिक्स है। लेकिन एक दूसरी समस्या है जो मुझे लगता है कि InputTimeStamp
को histc
पर पहले इनपुट के रूप में OutputTimeStamp
एंजैनोर द्वारा अपनाया गया है। यदि आप इनपुट इनपुट सेट करते समय OutputTimeStamp = 730486.002 + (0:0.001:TOutput * 0.001 - 0.001)';
OutputTimeStamp = 730486.002 + (0:0.0001:TOutput * 0.0001 - 0.0001)';
बदलते हैं तो समस्या उत्पन्न होती है।
एंगैनोर उस सब कुछ के लिए मजबूत दिखाई देता है जिस पर मैंने इसे फेंक दिया, साथ ही यह सबसे तेज़ था।
मैं विभिन्न इनपुट विनिर्देशों के लिए गति परीक्षण का एक बहुत था - निम्नलिखित संख्या काफी प्रतिनिधि हैं:
मेरे अनुभवहीन पाश: Elapsed time is 8.579535 seconds.
Angainor: Elapsed time is 0.661756 seconds.
Rody: Elapsed time is 0.913304 seconds.
ChthonicDaemon: Elapsed time is 22.916844 seconds.
मैं एंजैनर के समाधान को +1 कर रहा हूं और हल किए गए प्रश्न को चिह्नित कर रहा हूं।
करना होगा बस स्पष्ट होना: यह महत्वपूर्ण है कि बार क्रम में नहीं हैं? ज्यादातर मामलों में अवलोकन सख्ती से बढ़ते समय में किए जाते हैं। – chthonicdaemon
@chthonicdaemon आप मान सकते हैं कि समय आरोही क्रम में हैं। मुझे लगता है कि 2011b में 'टाइम्सरीज़' कक्षा और 'resample' function' दोनों हैं, इसलिए मुझे आपके उत्तर का परीक्षण करने में सक्षम होना चाहिए। चीयर्स। –