मुझे लाखों नोड्स और लाखों किनारों के साथ बड़े नेटवर्क पर नेटवर्क विश्लेषण में रूचि है। मैं कई प्रारूपों से पार्स नेटवर्क जैसी चीजों को करने में सक्षम होना चाहता हूं, कनेक्टेड घटकों को ढूंढ सकता हूं, समुदायों का पता लगा सकता हूं, और पेजरैंक जैसे केंद्रीयता उपायों को चला सकता हूं।नेटवर्कएक्स के साथ क्या स्केलेबिलिटी समस्याएं जुड़ी हैं?
मैं नेटवर्कएक्स से आकर्षित हूं क्योंकि इसमें एक अच्छा एपीआई, अच्छा दस्तावेज है, और वर्षों से सक्रिय विकास में है। इसके अलावा क्योंकि यह अजगर में है, इसे विकसित करने के लिए जल्दी होना चाहिए।
हाल ही में एक प्रस्तुति में (स्लाइड GitHub here पर उपलब्ध हैं), यह दावा किया गया कि:
कई अन्य उपकरणों के विपरीत, NX पैमाने आधुनिक समस्याओं के लिए प्रासंगिक पर डेटा को संभालने के लिए डिज़ाइन किया गया है .. । एनएक्स में कोर एल्गोरिदम का सबसे तेज़ विरासत कोड पर निर्भर है।
प्रस्तुति में यह भी कहा गया है कि नेटवर्कएक्स के बेस एल्गोरिदम सी/फोरट्रान में लागू किए गए हैं।
हालांकि, स्रोत कोड को देखते हुए, ऐसा लगता है कि नेटवर्कएक्स ज्यादातर पाइथन में लिखा जाता है। मैं स्रोत कोड से बहुत परिचित नहीं हूं, लेकिन मुझे कुछ उदाहरणों से अवगत है जहां नेटवर्कएक्स भारी भारोत्तोलन करने के लिए numpy का उपयोग करता है (जो बदले में सी/फोरट्रान रैखिक बीजगणित करने के लिए उपयोग करता है)। उदाहरण के लिए, फ़ाइल networkx/networkx/algorithms/centrality/eigenvector.py
eigenvectors की गणना करने के लिए numpy का उपयोग करता है।
क्या किसी को पता है कि एक अनुकूलित लाइब्रेरी को कॉल करने की यह रणनीति वास्तव में नेटवर्कएक्स में प्रचलित है, या अगर कुछ एल्गोरिदम इसे करते हैं? क्या कोई भी नेटवर्कएक्स से जुड़े अन्य स्केलेबिलिटी मुद्दों का वर्णन कर सकता है? NetworkX लीड प्रोग्रामर से
उत्तर मैं NetworkX मेलिंग सूची पर इस सवाल उठाया, और Aric Hagberg ने जवाब दिया:
डेटा NetworkX में इस्तेमाल किया संरचनाओं बड़ी समस्याओं का स्केलिंग के लिए उपयुक्त हैं (उदाहरण के लिए डेटा संरचना एक आसन्न सूची है)। एल्गोरिदम में विभिन्न स्केलिंग गुण होते हैं लेकिन उनमें से कुछ उल्लेख करने योग्य हैं (उदा। पेजरैंक, कनेक्टेड घटक, किनारों की संख्या में रैखिक जटिलता हैं)।
इस बिंदु पर नेटवर्कएक्स शुद्ध पायथन कोड है। आसन्न संरचना पाइथन शब्दकोशों के साथ एन्कोड किया गया है जो स्मृति और कम्प्यूटेशनल गति के खर्च पर बहुत लचीलापन प्रदान करता है। बड़े ग्राफ बहुत मेमोरी लेंगे और आप अंततः बाहर चले जाएंगे।
नेटवर्कएक्स एल्गोरिदम के लिए न्यूमपी और साइपी का उपयोग करता है जो मुख्य रूप से रैखिक बीजगणित के आधार पर होता है। उस स्थिति में ग्राफ को (प्रतिलिपि) को नम्पी मैट्रिक्स या SciPy स्पैस मैट्रिस का उपयोग करके आसन्न मैट्रिक्स के रूप में दर्शाया गया है। उन एल्गोरिदम विरासत सी और फ़ोरट्रान कोड से लाभ उठा सकते हैं जिसका उपयोग न्यूमपी और विज्ञान में हुड के तहत किया जाता है।
ऐसा लगता है कि मुझे इस समय स्रोत का निरीक्षण करने में परेशानी है। लेकिन किसी भी मामले में, विचार करें: 80% समय कोड के 20% में खर्च किया जा सकता है। Mercurial * ज्यादातर * पायथन में लिखा गया है, फिर भी मैंने एक व्यक्ति को गिट की तुलना में इसकी गति के बारे में शिकायत नहीं की है, जो ज्यादातर सी – delnan
हां है, लेकिन मैं स्मृति के बारे में भी चिंतित हूं। नेटवर्कक्स में ग्राफ प्रतिनिधित्व एक पायथन पुस्तकालय है। क्या इसका मतलब यह होगा कि मैं स्मृति में केवल छोटे ग्राफ फिट कर सकता हूं? – conradlee