NetworkX에서 역방향 다이 그래프의 전체 복사본을 만들고 그 복사본의 PageRank를 조사 할 때 문제가 있습니다. 문제가 PageRank에있는 것처럼 보이지는 않습니다. 단절된 역 분극 그래프의 PageRank를 계산할 때 예외가 발생합니다.NetworkX - 역전 된 그래프의 딥 복사본 만들기
먼저이 코드를 사용하여 무작위로 노드를 만들고 그 중 몇 개를 무작위로 선택한 다음 해당 노드에서 다른 50 개 또는 무작위로 선택된 노드로 향하는 가장자리를 그립니다.
G = global_classroom(1000)
G.reverse(False)
print nx.pagerank(G)
모든 것을 완벽하게 잘 작동 :이 호출하면 그 다음, 지금
def global_classroom(nodes):
network = nx.DiGraph()
network.add_nodes_from([User(i, "0.0.1") for i in range(nodes)])
network_nodes = network.nodes()
teachers = random.sample(network_nodes, nodes/100)
for teacher in teachers:
for i in range(nodes/20):
student = network_nodes[random.randrange(nodes)]
if teacher != student:
network.add_edge(teacher, student)
for node in network_nodes:
if network.degree(node) == 0:
network.remove_node(node)
return network
정도를 0에서 모든 노드를 트림. NetworkX는 아무 문제없이 PageRank를 계산할 수 있습니다.
하지만이를 호출하는 경우 :
G = global_classroom(1000)
G_page_rank = G.reverse()
nx.pagerank(G_page_rank)
는 <__main__.User object at 0x104618050>
내 소리를 나타내는 두 글자의 노드를 구성하는 많은 개체 중 하나입니다
Traceback (most recent call last):
File "a.py", line 62, in <module>
rank = nx.pagerank(L_page_rank)
File "<string>", line 2, in pagerank
File "/Users/PSnyder/Documents/Git/infection/networkx/utils/decorators.py", line 68, in _not_implemented_for
return f(*args,**kwargs)
File "/Users/PSnyder/Documents/Git/infection/networkx/algorithms/link_analysis/pagerank_alg.py", line 140, in pagerank
dangling_nodes = [n for n in W if W.out_degree(n, weight=weight) == 0.0]
File "/Users/PSnyder/Documents/Git/infection/networkx/classes/digraph.py", line 1023, in out_degree
return next(self.out_degree_iter(nbunch,weight))[1]
File "/Users/PSnyder/Documents/Git/infection/networkx/classes/digraph.py", line 941, in out_degree_iter
for n,nbrs in nodes_nbrs:
File "/Users/PSnyder/Documents/Git/infection/networkx/classes/digraph.py", line 934, in <genexpr>
nodes_nbrs=((n,self.succ[n]) for n in self.nbunch_iter(nbunch))
KeyError: <__main__.User object at 0x104618050>
던져 예외가있다.
그래프를 원래대로 되돌리려면 그래프를 다시 뒤집을 필요없이 간단하게 전체 복사본을 만들 수 있습니다.
이class User(object):
def __init__(self, name, version, teachers = [], students = []):
self.name = name
self.version = version
G.add_node(self)
self.add_teachers(teachers)
self.add_students(students)
def add_students(self, students):
for student in students:
G.add_edge(self, student)
def add_teachers(self, teachers):
for teacher in teachers:
G.add_edge(teacher, self)
방금 복사를 반대로 다음 (') copy.deepcopy (G'와) 별도로 그래프의 깊은 복사본을 만들어 수 없습니다 (() 대신 사용자의 정수를 사용하여) 작동 ? – BrenBarn
왜 그래, 할 수있어! 이상하지만 작동하지만 nx.reverse (G)는 그렇지 않습니다. –