2017-07-25 8 views
1
>>> import networkx as nx 
>>> g = nx.Graph() 
>>> g.add_nodes_from([1, 2, 3, 4, 5], carved=False) 
>>> g[1] 
{} 
>>> nx.get_node_attributes(g, "carved") 
{1: False, 2: False, 3: False, 4: False, 5: False} 
>>> 

「g [1]」と入力すると「刻まれた」属性が表示されませんか? 次作品:NetworkX add_nodes_fromが期待通りに機能しない

>>> g[1] 
{} 
>>> g[1]["carved"] = True 
>>> g[1] 
{'carved': True} 
>>> 

私はここで何をしないのです、なぜ属性が第二の例のように適用されている「彫る」ではないでしょうか?私はWindows上でPython 2.7を実行しています。私はnetworkxのインストールを更新しました。おそらく古いバージョンを持っていたと思いますか?

ご協力いただければ幸いです。

答えて

1

g[1]の代わりにg.node[1]を使用したようです。

0

TL/DR:g.node[u]を使用して、ノードの属性を取得します。ug[u]は全く別のものです。


基本的なデータ構造は、基本的にはgです。ノードはgの鍵であり、例えば1gの鍵である場合、g[1]は、鍵がノード1の近傍である辞書です。

したがって、ノードをgに配置した後では、エッジを入れていません。 g[1]が空であるという事実は、1に隣人がないという事実を反映しています。あなたが行くと直接g[1]["carved"] = Trueを設定することにより、基礎となるデータ構造を編集したら、あなたは今g.neighbors(1)['carved']あり、そしてgは今1'carved'間のエッジを持っており、その縁がg.edge[1]['carved']から(True属性ました。しかし、あなたは直接編集したためということがわかりますデータ構造、g.nodes()これは何をしたい明確ではありません。'carved'がノードとして作成されていることを認識していない。

代わりに、からエッジのいずれかの属性を取得するために、ノードug.edge[u][v]の属性を取得するためにg.node[u]を使用しますuv

関連する問題