2011-02-12 14 views
6

में समय श्रृंखला मॉडलिंग यदि मैं स्टॉक मूल्यों को पकड़ने के लिए एफ # में समय श्रृंखला प्रकार बनाना चाहता हूं, तो मुझे किस मूल प्रकार का उपयोग करना चाहिए? हमएफ # - सीक बनाम सरणी बनाम वेक्टर बनाम सूची बनाम जेनेरिक सूची

  1. समय सूचकांक के आधार पर एक सबसेट का चयन करें, मतलब, एसटीडी की तरह या सह-संबंध की तरह कई सबसेट के लिए एक सबसेट के लिए
  2. गणना बुनियादी आँकड़ों की जरूरत है, नए डेटा और तेजी से अद्यतन आँकड़े या तकनीकी के लिए
  3. संलग्न आइटम संकेतक,
  4. समय श्रृंखला के बीच रेखीय प्रतीपगमन करते हैं, आदि

मैंने पढ़ लिया है array में बेहतर प्रदर्शन किया है, seq एक छोटे मेमोरी है फुटनोट, list आइटम जोड़ने के लिए बेहतर है और कुछ गणित गणना के लिए F # vector आसान है। सभी व्यापार बंदियों को संतुलित करने के लिए, आप एफ # में स्टॉक मूल्य समय श्रृंखला का मॉडल कैसे मॉडल करेंगे? धन्यवाद।

उत्तर

10

एक ठोस प्रतिनिधित्व के रूप में आप या तो सरणी या सूची या कुछ अन्य .NET संयोजन प्रकार चुन सकते हैं। एक अनुक्रम seq<'T> एक सार प्रकार है और दोनों सरणी और सूची स्वचालित रूप से अनुक्रम भी हैं - इसका अर्थ यह है कि जब आप कुछ कोड लिखते हैं जो अनुक्रमों के साथ काम करते हैं, तो यह किसी भी ठोस डेटा प्रकार (सरणी, सूची या किसी अन्य .NET संग्रह) के साथ काम करेगा।

तो, जब डाटा प्रोसेसिंग लेखन, आप Seq डिफ़ॉल्ट रूप से (के रूप में यह आपको व्यापक सुविधा मिलती है - यह बात नहीं क्या ठोस प्रतिनिधित्व आप का उपयोग नहीं करता है) का उपयोग कर सकते हैं और फिर कुछ कार्यों का अनुकूलन ठोस प्रतिनिधित्व उपयोग करने के लिए (जो भी वह होगा) यदि आपको तेजी से दौड़ने के लिए कुछ चाहिए।

के बारे में ठोस प्रतिनिधित्व - मुझे लगता है कि महत्वपूर्ण सवाल आप मूल डेटा संरचना (अपरिवर्तनीय सूची या सरणी अपरिवर्तनीय तरह से इस्तेमाल किया) को बदले बिना तत्वों को जोड़ने के लिए या कि क्या आप डेटा संरचना उत्परिवर्तित करना चाहते हैं चाहते हैं या नहीं है (उदाहरण के लिए कुछ mutable .NET संग्रह का उपयोग करें)।

यदि आपको नए आइटमों को आसानी से जोड़ने की आवश्यकता है तो आप या तो अपरिवर्तनीय सूची (जो सामने वाले तत्वों को जोड़ना चाहते हैं) या एक परिवर्तनीय संग्रह का उपयोग कर सकते हैं (सरणी ऐसा नहीं करेगी क्योंकि इसे आकार में नहीं बदला जा सकता है)।

  • आप एक और अधिक परिष्कृत प्रणाली पर काम कर रहे हैं, मैं (MSDN देखें) ObservableCollection<T> पर एक नज़र डालने की सिफारिश करेंगे। यह एक संग्रह है जो इसे बदलते समय स्वचालित रूप से सूचित करता है। अधिसूचना के जवाब में, आप अपने आंकड़े अपडेट कर सकते हैं (यह आपको यह भी बताता है कि कौन से तत्व जोड़े गए थे, इसलिए आपको सबकुछ फिर से समझने की आवश्यकता नहीं है)। हालांकि, इस प्रकार के साथ काम करने के लिए एफ # में कोई पुस्तकालय नहीं है, इसलिए आपको बहुत सारी चीजें लिखनी होंगी।

  • यदि आप डेटा को केवल दुर्लभ रूप से जोड़ रहे हैं या उन्हें बड़े समूहों में जोड़ रहे हैं, तो आप सरणी का उपयोग कर सकते हैं (और जब भी आप आइटम जोड़ते हैं तो नई सरणी आवंटित करें)। यदि आपके पास संग्रह में केवल अपेक्षाकृत कम संख्या में आइटम हैं, तो आप सूचियों का उपयोग कर सकते हैं (जहां आइटम जोड़ना आसान है)।

संख्यात्मक गणना के लिए, एफ # पॉवर (और वेक्टर की तरह प्रकार) केवल सुविधाओं की काफी limitied सेट प्रदान करते हैं, तो आप कुछ तृतीय पक्ष पुस्तकालयों को देखने के लिए आवश्यकता हो सकती है। Extreme optimizations कुछ व्यावसायिक आईडी है जिसमें कुछ एफ # उदाहरण हैं और Math.NET एक ओपन सोर्स विकल्प है।

अन्यथा, किसी भी ठोस सलाह देना मुश्किल है - क्या आप अपने सिस्टम के बारे में कुछ और विवरण जोड़ सकते हैं? (उदाहरण के लिए डेटा सेट कितना बड़ा है, कितनी बार आइटम को कितनी बार जोड़ा जाना चाहिए ...)

+1

मुझे नहीं लगता कि उत्परिवर्तनीय बनाम अपरिवर्तनीय प्रश्न "महत्वपूर्ण" है। लोग हर समय एक अपरिवर्तनीय फैशन में सरणी का उपयोग करते हैं, केवल सरणी के पेर्फ प्राप्त करने के लिए (क्या वह .NET के पास एक रीडोनली सरणी प्रकार था!), इसलिए मुझे लगता है कि अन्य व्यावहारिकता उत्परिवर्तन की तुलना में अधिक चिंता का विषय है। – Brian

+0

@ ब्रायन - हाँ आप बिल्कुल सही हैं। असल में, मैं सरणी को _immutable_ के रूप में अधिक विचार कर रहा था क्योंकि आप तत्व नहीं जोड़ सकते (और यह मानते हुए कि ऐतिहासिक डेटा नहीं बदलता है इसलिए तत्वों को उत्परिवर्तित नहीं किया जाएगा)! मैंने जवाब स्पष्ट किया। –

संबंधित मुद्दे