2013-08-15 23 views
5

Python kitaplığı ağında bir özelliğe sahip olan grafiğin düğümlerini ve kenarlarını kaldırmak istiyorum. Ben teori gösterimini ayarlamak ama yine de yeni olduğum gibi kullanır bazı sözdizimi gördükpython networkx Bazı koşullarla düğümleri ve kenarları kaldırın

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

: Mesela ben bütün düğümleri ve düğüm derecesi < 2. Aşağıdaki psuedocode düşünün oldu kenarlarını kaldırmak istediğini varsayalım python'a nasıl kullanacağımı bilmiyorum. Bunu çalışma python koduna nasıl dönüştürebilirim?

cevap

1

biz f ayarlayacaktır şu her köşe derecesi> 0 olması gerekir kısıtlaması için g konu olduğu g bir başlatılmış grafiğini varsa biz kolayca değişkenle 0 genelleme olabilir:

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

Graph.remove_nodes_from() yöntemi, düğümlerin bir listesini (aslında kapsayıcı) alır. Yani sadece durumunuzu karşılayan bir liste oluşturmanız gerekir. Silinecek düğümlerin bir listesini oluşturmak için Python'un list comprehension yapısını kullanabilirsiniz.

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

Daha önce bu dili kullanmamış olduğumdan beri "kaldır" ı başlattığınız küme teorisi dilinin küçük bir açıklamasını da ekleyebilir misiniz? – CodeKingPlusPlus

+0

Liste anlaşmaları için Python belgelerine bir bağlantı ekledim. – Aric

+0

Teşekkürler, doğru terimi bilmem gerekiyordu. – CodeKingPlusPlus

İlgili konular