2010-02-11 10 views
6

मैं एक प्रोजेक्ट पर काम कर रहा हूं जहां मुझे दो स्ट्रिंग कुंजियों द्वारा अनुक्रमित संख्याओं के मैट्रिक्स को स्टोर करने की आवश्यकता है। मैट्रिक्स jagged नहीं है, यानी यदि किसी भी पंक्ति के लिए एक स्तंभ कुंजी मौजूद है तो यह सभी पंक्तियों के लिए मौजूद होना चाहिए। इसी प्रकार, यदि किसी भी कॉलम के लिए एक पंक्ति कुंजी मौजूद है तो यह सभी कॉलम के लिए मौजूद होना चाहिए।सहयोगी Matrices?

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

उत्तर

2

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

0

अजगर में आप कर सकते थे

>>> d = {} 
>>> d["foo","bar"] = 10 
>>> d 
{('foo', 'bar'): 10} 

एक dict दो तार की एक टपल द्वारा अनुक्रमित, जैसे मुझे यकीन है कि क्या "लागू गैर jaggedness" आप के लिए इसका मतलब है नहीं कर रहा हूँ है, लेकिन आप या तो करने के लिए एक defaultdict इस्तेमाल कर सकते हैं प्रविष्टियों की है कि स्पष्ट रूप से सेट नहीं किया गया के लिए एक डिफ़ॉल्ट मान, या एक ज्ञात मान के साथ dict आरंभ:

>>> xkeys = "abcdef" 
>>> ykeys = "xyz" 
>>> d = dict(((x,y), 0) for x in xkeys for y in ykeys) 
>>> d 
{('b', 'y'): 0, ('a', 'z'): 0, ('b', 'x'): 0, ('e', 'y'): 0, ('a', 'x'): 0, ('f', 'z'): 0, ('a', 'y'): 0, ('f', 'y'): 0, ('d', 'y'): 0, ('f', 'x'): 0, ('d', 'x'): 0, ('e', 'x'): 0, ('e', 'z'): 0, ('c', 'x'): 0, ('d', 'z'): 0, ('c', 'y'): 0, ('c', 'z'): 0, ('b', 'z'): 0} 

आप लागू करने के लिए है कि एक ज्ञात सेट में केवल चाबियाँ तो मैं करने के लिए dict उपवर्गीकरण का सुझाव देते हैं अनुमति दी जाती है चाहते हैं सत्यापन जोड़ें।

+0

हाँ, मुझे वास्तव में पाइथन को अच्छी तरह से नहीं पता है। मुझे पता नहीं था कि आप ऐसा कर सकते हैं, हालांकि यह अंतराल में समझ में आता है कि आप मूल रूप से एक कुंजी के रूप में tuples का उपयोग कर रहे हैं। – dsimcha

+0

यह बहुत अच्छा काम करता है, लेकिन यह उन चाबियों को स्टोर करने के लिए और अधिक मेमोरी का उपयोग करेगा जो मैंने सोचा था कि आप जो चाहते थे उसका हिस्सा था। हालांकि, यह सुझाए गए तरीके से थोड़ा तेज़ होना चाहिए जिसके लिए मैट्रिक्स तक पहुंचने से पहले मैट्रिक्स इंडेक्स खोजने के लिए हैश टेबल लुक-अप की आवश्यकता होगी। गति या स्थान: यह सवाल है। –

+0

@ जस्टिन: यह एक अच्छा विचार है, लेकिन मैं एक बेहतर उत्तर की उम्मीद कर रहा हूं। आदर्श रूप में मुझे एक "असली" मैट्रिक्स चाहिए, जहां मैं एक पंक्ति के लिए सभी पंक्तियां प्राप्त कर सकता हूं, या एक पंक्ति के लिए सभी कॉलम इत्यादि, केवल एक कामकाज नहीं। – dsimcha

0

पाइथन के लिए larry मॉड्यूल हाल ही में जारी किया गया था। मेरा मानना ​​है कि यह वही करता है जो आप चाहते हैं।

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