python networkx
を使用して作成されたノードのネットワークがあります。ノードラベルに基づいて後で情報にアクセスできるように、ノードに情報を保存したいです。 node)および情報が格納されているフィールド(ノード属性など)。格納される情報は、xyz
がノードである場合に、文字列または数値にすることができます。
xyz
dob=1185
の生年月日、xyz
pob=usa
の生年月日、およびその日のような文字列を持つ2つまたは3つのフィールドを保存したいxyz
dayob=monday
の誕生。
私はG.add_node
属性辞書フィールドを使用できることを知っています...しかし、特定のフィールドではアクセスできないようです。他の方法があれば、感謝します。
次に、xyz
を、同じ情報を共有しているネットワーク内の他のノードと比較します。すなわち、ノードxyz
とノードabc
の交差点は、ビットの日付、生年月日、および生年月日に基づいています
たとえば、ノードxyz
およびabc
にEdgeがそれぞれのdob
s、pob
sおよびdayob
sを印刷する場合
あなたが言うように、ノードをグラフに追加するときに属性を追加するだけです
G.add_node('abc', dob=1185, pob='usa', dayob='monday')
または辞書として
G.add_node('abc', {'dob': 1185, 'pob': 'usa', 'dayob': 'monday'})
属性にアクセスするには、辞書と同じように属性にアクセスします
G.node['abc']['dob'] # 1185
G.node['abc']['pob'] # usa
G.node['abc']['dayob'] # monday
接続されたノードの属性を見たいと言います。これを実現する方法の小さな例を次に示します。
for n1, n2 in G.edges_iter():
print G.node[n1]['dob'], G.node[n2]['dob']
print G.node[n1]['pob'], G.node[n2]['pob']
# Etc.
Networkx 2.0以降、G.edges_iter()はG.edges()に置き換えられました。これはノードにも適用されます。 data=True
属性にアクセスします。コードは次のとおりです。
for n1, n2 in list(G.edges(data=True)):
print G.node[n1]['dob'], G.node[n2]['dob']
print G.node[n1]['pob'], G.node[n2]['pob']
# Etc.
さらに、ノードを追加するときに属性を割り当てる必要はありません。追加した後でも、直接設定できます。
import networkx as nx
G=nx.Graph()
G.add_Edge(1,2)
G.node[1]['name'] = 'alpha'
G.node[2]['name'] = 'omega'
G.node[1]['name']
> 'alpha'
set_node_attributes
( documentation )を使用して、複数のノードの属性を同時に設定することもできます。
nx.set_node_attributes(G, 'cost', {1:3.5, 2:56})
G.node[1]['cost']
> 3.5
同様のアプローチを使用して、エッジ属性を設定できます。
networkx
v2.0以降、次を使用できます。
import networkx as nx
G = nx.Graph()
G.add_node('abc', dob=1185, pob='usa', dayob='monday')
nx.get_node_attributes(G, 'dob')
> {'abc': 1185}
通常どおりこの辞書にアクセスできます。
{'abc': 1185}['abc']
> 1185