У Dict нет атрибута «направленный» - PullRequest
0 голосов
/ 21 ноября 2018

При применении библиотеки алгоритмов Pagerank в Python к графу (JSON) в следующем формате:

matrix={'1':{'2':23,'4':56},'4':{'2':22,'7':5}}

pr=nx.pagerank(matrix,alpha=0.85)
# -->{from_node:{to_node:edge weight)}

Я получаю следующую ошибку:

Traceback (most recent call last):
  File "somescriptname.py", line 1, in <module>
  File "<decorator-gen-276>", line 2, in pagerank
  File "/.../site-packages/networkx/utils/decorators.py", line 67, in _not_implemented_for
    terms = {'directed': graph.is_directed(),  
AttributeError: 'dict' object has no attribute 'is_directed'

1 Ответ

0 голосов
/ 21 ноября 2018

Вы передаете в словарь, но функция networkx.pagerank() не принимает словарь.Из документации:

G (график) - график NetworkX.Ненаправленные графы будут преобразованы в ориентированный граф с двумя направленными ребрами для каждого неориентированного ребра.

Вы можете использовать networkx.Graph() для преобразования вашего словаря :

G = nx.Graph(matrix)
pr = nx.pagerank(G, alpha=0.85)

Демо:

>>> import networkx as nx
>>> matrix = {'1': {'2': 23, '4': 56}, '4': {'2': 22, '7': 5}}
>>> G = nx.Graph(matrix)
>>> nx.pagerank(G, alpha=0.85)
{'1': 0.2459279727012903, '4': 0.36673529905297914, '2': 0.2459279727012903, '7': 0.14140875554444032}
...