web-dev-qa-db-ja.com

ノード属性の保存とアクセスpython networkx

python networkxを使用して作成されたノードのネットワークがあります。ノードラベルに基づいて後で情報にアクセスできるように、ノードに情報を保存したいです。 node)および情報が格納されているフィールド(ノード属性など)。格納される情報は、xyzがノードである場合に、文字列または数値にすることができます。

xyzdob=1185の生年月日、xyzpob=usaの生年月日、およびその日のような文字列を持つ2つまたは3つのフィールドを保存したいxyzdayob=mondayの誕生。

私はG.add_node属性辞書フィールドを使用できることを知っています...しかし、特定のフィールドではアクセスできないようです。他の方法があれば、感謝します。

次に、xyzを、同じ情報を共有しているネットワーク内の他のノードと比較します。すなわち、ノードxyzとノードabcの交差点は、ビットの日付、生年月日、および生年月日に基づいています

たとえば、ノードxyzおよびabcにEdgeがそれぞれのdobs、pobsおよびdayobsを印刷する場合

37
user1295112

あなたが言うように、ノードをグラフに追加するときに属性を追加するだけです

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.
43
Maehler

さらに、ノードを追加するときに属性を割り当てる必要はありません。追加した後でも、直接設定できます。

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_attributesdocumentation )を使用して、複数のノードの属性を同時に設定することもできます。

nx.set_node_attributes(G, 'cost', {1:3.5, 2:56})
G.node[1]['cost']
> 3.5

同様のアプローチを使用して、エッジ属性を設定できます。

22
Joel

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
6
severinsimmler