2009-11-02 6 views
8

बिगरेय मॉड्यूल पर प्रलेखन कुछ अस्पष्ट है। यह बताता है कि उस मॉड्यूल में सरणी का उद्देश्य "बड़े सरणी" को पकड़ना है, लेकिन यह वास्तव में परिभाषित नहीं करता है कि इसका अर्थ "बड़ी सरणी" से क्या है। मुझे एक नियमित सरणी पर बिगरे का उपयोग कब करना चाहिए? क्या तत्वों की एक निश्चित संख्या है जिसके बाहर मुझे केवल बिगरे का उपयोग करना चाहिए? क्या यह हजारों में है? लाखों? अरबों?मुझे बिगरे का उपयोग करने की आवश्यकता कब है और क्यों?

और बड़े एरे से निपटने में बिगरे बेहतर क्या बनाता है? क्या एक नियमित सरणी से निपटने में बेहतर बनाता है ... गैर-बड़े सरणी?

+2

ऐसा हो सकता है कि यह 'स्पैर सरणी' के रूप में 'बड़ी सरणी' को परिभाषित कर रहा है, हालांकि मैं ओकैमल से पूरी तरह से अनजान हूं, इसलिए मैं यहां से बाहर हो सकता हूं। –

+0

यहां तक ​​कि उस मामले में, आपको एक अलग डेटा संरचना की आवश्यकता क्यों होगी? –

+1

एक स्पैर सरणी (आवश्यक रूप से) मेमोरी में एक जगह नहीं रखती है, या यहां तक ​​कि सरणी में प्रत्येक तत्व के लिए 'शून्य' के लिए एक सूचक भी नहीं है। यदि आपके प्रश्न में आपके सुझाव के अनुसार 2 बिलियन तत्व हैं, तो यह कुछ 8 जीबी मूल्य है, जो पॉइंटर्स में पूरी तरह से है। यदि आपके पास वास्तव में सरणी में केवल 5 आइटम हैं (संभवतः उच्च इंडेक्स पर), तो आपके संग्रहण स्थान को केवल 5 पॉइंटर्स रखने और बाइट्स के मुट्ठी भर लेने की आवश्यकता होती है। –

उत्तर

10

मैं (this page से) इसका जवाब मिला:

bigarray पुस्तकालय बड़े, बहु-आयामी, संख्यात्मक सरणियों लागू करता है। मॉड्यूल ऐरे में वर्णित मानक कैमल सरणी से उन्हें अलग करने के लिए इन सरणी को "बड़े सरणी" कहा जाता है।

  • बिग सरणियों, (नाव सरणी एक 32-बिट प्लेटफॉर्म पर 2,097,151 तत्वों के लिए सीमित हैं आकार में सीमित नहीं हैं CAML सरणियों के विपरीत, अन्य सरणी: "बड़ा सरणियों" और मानक CAML सरणियों के बीच मुख्य अंतर इस प्रकार हैं 4194303 तत्वों के प्रकार)।
  • बड़े सरणी बहु-आयामी हैं। 1 और 16 के बीच आयामों की कोई भी संख्या समर्थित है। इसके विपरीत, कैमल सरणी मोनो-आयामी हैं और एरे के सरणी के रूप में एन्कोडिंग बहु-आयामी सरणी की आवश्यकता होती है।
  • बिग एरे में केवल पूर्णांक और फ़्लोटिंग-पॉइंट नंबर हो सकते हैं, जबकि कैमल सरणी में मनमानी कैमल डेटा प्रकार हो सकते हैं। हालांकि, बड़े सरणी पूर्णांक और फ़्लोटिंग-पॉइंट तत्वों के अधिक अंतरिक्ष-कुशल भंडारण प्रदान करते हैं, विशेष रूप से क्योंकि वे मानक कैमल प्रकार के डबल के अलावा "छोटे" प्रकारों जैसे एकल-परिशुद्धता फ्लोट और 8 और 16-बिट पूर्णांक का समर्थन करते हैं। -प्रसिजन फ्लोट्स और 32 और 64-बिट पूर्णांक।
  • बड़े सरणी का मेमोरी लेआउट सी और फोरट्रान में सरणी के साथ पूरी तरह से संगत है, जिससे बड़े एरे को कैमल कोड और सी/फोरट्रान कोड के बीच आगे और पीछे डेटा की प्रतिलिपि बनाने की इजाजत नहीं मिलती है।
  • बिग एरे दिलचस्प उच्च स्तरीय संचालन का समर्थन करते हैं जो सामान्य सरणी कुशलता से प्रदान नहीं करती हैं, जैसे उप-सरणी निकालने और कुछ आयामों के साथ एक बहु-आयामी सरणी "टुकड़ा", बिना किसी प्रतिलिपि के।
+0

सी/फोरट्रान के साथ संगतता बड़े मामलों के लिए मैं देखता हूं। सी या फोरट्रान सरणी-आधारित पुस्तकालयों (उदा। बीएलएएस) के साथ इंटरफेसिंग करते समय यह स्मृति उपयोग को काफी कम कर सकता है। –

+0

आकार सीमा 16 एमबी है और फ्लोट सरणी, int arrays और तारों (जो बाइट सरणी हैं) को प्रभावित करती है। 32-बिट प्लेटफ़ॉर्म पर बड़े सरणी को अनुमति देने के लिए बड़े सरणी का उपयोग किया जाता है। आपका सबसे अच्छा बिट 64-बिट प्लेटफ़ॉर्म का उपयोग करना और बड़े सरणी के बारे में भूलना है ... –