2015-02-02 4 views
2

Я работаю с networkx и не могу найти список доступных атрибутов для ребер или узлов в любом месте. Меня не интересуют, какие атрибуты уже назначены, но что я могу установить/изменить, когда я создаю или редактирую узел или ребро.список атрибутов, доступных для использования в networkx

Может кто-нибудь указать мне, где это задокументировано?

Спасибо!

ответ

0

При их создании вы можете назначить множество атрибутов края или узла. Вам решать, какими будут их имена.

import networkx as nx 
G=nx.Graph() 
G.add_edge(1,2,weight=5) #G now has nodes 1 and 2 with an edge 
G.edges() 
#[(1, 2)] 
G.get_edge_data(2,1) #note standard graphs don't care about order 
#{'weight': 5} 
G.get_edge_data(2,1)['weight'] 
#5 
G.add_node('extranode',color='yellow', age = 17, qwerty='dvorak', asdfasdf='lkjhlkjh') #nodes are now 1, 2, and 'extranode' 
G.node['extranode'] 
{'age': 17, 'color': 'yellow', 'qwerty': 'dvorak', 'asdfasdf': 'lkjhlkjh'} 
G.node['extranode']['qwerty'] 
#'dvorak' 

Или вы можете использовать Dict, чтобы определить некоторые атрибуты с nx.set_node_attributes и создать Dict для всех узлов, для которых конкретный атрибут определяется с nx.get_node_attributes

tmpdict = {1:'green', 2:'blue'} 
nx.set_node_attributes(G,'color', tmpdict) 
colorDict = nx.get_node_attributes(G,'color') 
colorDict 
#{1: 'green', 2: 'blue', 'extranode': 'yellow'} 
colorDict[2] 
#'blue' 

Точно так же есть nx.get_edge_attributes и nx.set_edge_attributes.

Дополнительная информация here в руководстве networkx. Примерно на половину этой страницы под заголовками «Атрибуты узла» и «Атрибуты грани». Конкретную документацию для set...attributes и get...attributes можно найти в разделе «Атрибуты» here.

0

Если вы хотите запросить график для всех возможных атрибутов, которые могли быть применены к различным узлам (и это для общедоступных графиков или тех, которые были отредактированы с течением времени, более распространено, чем вы могли себе представить), то следующий делает трюк для меня:

set(np.array([list(self.graph.node[n].keys()) for n in self.graph.nodes()]).flatten()) 

Это возвращает все возможные имена атрибутов, для которых Есть значения, приписываемые граф-узлов. Я импортировал numpy as np здесь для того, чтобы использовать np.flatten для (относительно) производительности, но я уверен, что есть различные варианты ванили питона (например, попробуйте следующий itertools.chain метод, если вам нужно, чтобы избежать NumPy)

from itertools import chain 
set(chain(*[(ubrg.graph.node[n].keys()) for n in ubrg.graph.nodes()]))