Как сделать пользовательский объект в качестве узла для networkx и как его найти? - PullRequest
3 голосов
/ 13 декабря 2011

Я хочу, чтобы каждый узел имел строку ipaddress, значения широты и долготы.Также, как мне получить указатель на такой объект при поиске графа, созданного networkx?

1 Ответ

5 голосов
/ 13 декабря 2011

NetworkX основан на идее, что графики могут действовать как словари. Вам не нужен пользовательский объект для работы в качестве узлов, поскольку узлы могут иметь произвольные свойства, добавленные в их «словари».

Рассмотрим следующий интерактивный сеанс:

>>> import networkx as nx
>>> G = nx.Graph()
>>> G.add_node(1)
>>> G.node[1]['ipaddress'] = '8.8.8.8'
>>> G.node[1]['longitude'] = 37
>>> G.node[1]['latitude'] = 50
>>> G.node[1]
{'latitude': 50, 'ipaddress': '8.8.8.8', 'longitude': 37}
>>> G.node[1]['ipaddress']
'8.8.8.8'

Здесь создается граф с одним узлом 1, с которым связаны ipaddress, longitude и latitude. Вы обращаетесь к этому узлу напрямую в постоянное время, запрашивая график для узла, и получаете его свойства практически таким же образом.

Чтобы обратиться к конкретным узлам, у вас есть несколько возможностей. Вы можете, например, использовать словарь для хранения списка или набора узлов для любых желаемых свойств. Вторая возможность - которая полезна только для одного свойства, уникального для каждого узла, - это непосредственное использование свойства в качестве узла. Например, для IP-адресов:

>>> H = nx.Graph()
>>> H.add_node('8.8.8.8', longitude=37, latitude=50)
>>> H.node['8.8.8.8']
{'latitude': 50, 'longitude': 37}

Здесь я также воспользовался удобством, предоставляемым NetworkX, для указания свойств при создании узла.

...