2013-08-15 7 views
5

पायथन लाइब्रेरी नेटवर्कक्स में मैं एक ग्राफ के नोड्स और किनारों को हटाना चाहता हूं जिनमें कुछ संपत्ति है।पायथन नेटवर्कक्स कुछ स्थितियों के साथ नोड्स और किनारों को हटाएं

vdict = g.degree_dict()   #dictionary of nodes and their degrees 
g.remove_from_nodes(v in g s.t. vdict[v] < 2) 

मैं कुछ वाक्य रचना कि सिद्धांत अंकन सेट का उपयोग करता है लेकिन जैसा कि मैंने अभी भी नया हूँ देखा है: उदाहरण के लिए, मैं सभी नोड्स और किनारों जहां एक नोड की डिग्री < 2. निम्नलिखित psuedocode पर विचार था दूर करने के लिए चाहता था लगता है पाइथन के लिए मुझे नहीं पता कि इसका उपयोग कैसे किया जाए। मैं इसे वर्किंग पायथन कोड में कैसे परिवर्तित करूं?

उत्तर

1

हम एक initialized ग्राफ g निम्नलिखित f सेट हो जाएगा g बाधा है कि प्रत्येक शिखर एक डिग्री> 0. होना आवश्यक है के अधीन किया है, तो हम आसानी से एक चर के साथ 0 सामान्यीकरण सकता है:

f = nx.Graph()                                  
fedges = filter(lambda x: g.degree()[x[0]] > 0 and g.degree()[x[1]] > 0, g.edges()) 
f.add_edges_from(fedges) 
8

ग्राफ.remove_nodes_from() विधि नोड्स की एक सूची (कंटेनर वास्तव में) लेती है। तो आपको बस एक ऐसी सूची बनाने की आवश्यकता है जो आपकी हालत को पूरा करे। हटाने के लिए नोड्स की सूची बनाने के लिए आप पाइथन की list comprehension संरचना का उपयोग कर सकते हैं।

In [1]: import networkx as nx 

In [2]: G = nx.Graph() 

In [3]: G.add_edge(1,2) 

In [4]: G.add_edge(1,3) 

In [5]: G.add_edge(1,4) 

In [6]: G.add_edge(2,3) 

In [7]: G.add_edge(2,4) 

In [8]: G.degree() 
Out[8]: {1: 3, 2: 3, 3: 2, 4: 2} 

In [9]: remove = [node for node,degree in G.degree().items() if degree > 2] 

In [10]: remove 
Out[10]: [1, 2] 

In [11]: G.nodes() 
Out[11]: [1, 2, 3, 4] 

In [12]: G.remove_nodes_from(remove) 

In [13]: G.nodes() 
Out[13]: [3, 4] 
+0

क्या आप सेट सिद्धांत भाषा का एक छोटा सा स्पष्टीकरण जोड़ सकते हैं जहां आपने 'हटाएं' शुरू किया है क्योंकि मैंने पहले इस भाषा का निर्माण नहीं किया है? – CodeKingPlusPlus

+0

मैंने सूची समझ के लिए पायथन डॉक्स के लिए एक लिंक जोड़ा। – Aric

+0

धन्यवाद, मुझे उचित अवधि जानने की जरूरत है। – CodeKingPlusPlus

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