2014-09-29 8 views
7

मुझे नहीं पता कि नेटवर्कएक्स ने हाल ही में एक सूची लौटने के बजाय जनरेटर होने के तरीकों में से एक को tweaked किया है, लेकिन मैं ग्राफ के जीसी प्राप्त करने के लिए एक अच्छा (बल्कि बेहतर) तरीका ढूंढ रहा हूं।मैं नेटवर्कएक्स ग्राफ का विशाल घटक कैसे प्राप्त करूं?

मैं एक काम है, लेकिन वास्तव में अक्षम दिखने, नीचे स्निपेट:

# G = nx.Graph() 
giant = sorted(nx.connected_component_subgraphs(G), key=len, reverse=True)[0] 

वहाँ एक क्लीनर तरीका है?

उत्तर

12

नेटवर्कक्स 1.9, connected_components_subgraphs में एक पुनरावर्तक (एक क्रमबद्ध सूची के बजाय) देता है। इटरेटर द्वारा उत्पादित मान not in sorted order हैं। तो सबसे बड़ा लगता है, max का उपयोग करें:

giant = max(nx.connected_component_subgraphs(G), key=len) 

छंटाई हे है (एन एन लॉग इन करें)। अधिकतम लेना ओ (एन) है।

+0

नहीं पता था कि आप 'अधिकतम' तर्क के साथ 'कुंजी' तर्क का उपयोग कर सकते हैं ... क्या 'linked_component_subgraphs' विधि एनएक्स के भीतर उपयोग करने का सबसे अच्छा तरीका है? –

+0

हां। यही तरीका है [नेटवर्कक्स के मुख्य डेवलपर द्वारा अनुशंसित] (http://stackoverflow.com/a/24378179/190597)। – unutbu

+0

क्या सबसे बड़ा घटक नहीं बल्कि * सभी * की पहचान करने के लिए 'nx.connected_component_subgraphs()' को सॉर्ट करना संभव होगा? इसे सॉर्ट करके हम ओपी द्वारा इंगित एक ** अक्षम अक्षम स्निपेट ** के साथ समाप्त हो सकते हैं। क्या कोई कामकाज है, खासकर ** विशाल नेटवर्क ** के मामले में? – FaCoffee

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