75

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

xyz dob=1185次に、 の生年月日、 の生年月日、の生年月日などの文字列を持つ 2 つまたは 3 つのフィールドを保存しxyz pob=usaますxyz dayob=monday

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

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

たとえば、ノードxyzabcエッジにそれぞれdobの 、それらpobの 、およびそれらdayobのを出力させる場合

4

5 に答える 5

79

おっしゃる通り、ノードをグラフに追加するときに属性を追加するだけです

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.

注: networkx 2.4では、G.node[]が に置き換えられましたG.nodes[]

于 2012-12-04T12:19:32.767 に答える
46

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

import networkx as nx
G=nx.Graph()
G.add_edge(1,2)
#see comment below code for recent versions of networkx.
G.nodes[1]['name'] = 'alpha'
G.nodes[2]['name'] = 'omega'

G.nodes[1]['name']
> 'alpha'

注: 2.4 より前のバージョンでは、G.node[]代わりに を使用しG.nodes[]ます。非推奨の注意事項を参照してください。

同時に複数のノードの属性を設定できるようにするset_node_attributes( documentation ) を使用することもできます。

編集

#use the next line if it's networkx version 1.x
#nx.set_node_attributes(G, 'cost', {1:3.5, 2:56})

#use the next line if it's networkx version 2.x
#nx.set_node_attributes(G, {1:3.5, 2:56}, 'cost')

#or for something that works for 1.x or 2.x
nx.set_node_attributes(G, values = {1:3.5, 2:56}, name='cost')

G.node[1]['cost']
> 3.5

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

于 2015-04-30T03:16:56.530 に答える