我认为您误解了 networkx 文档上的注释。不过,我必须承认它的措辞可能更好。
PageRank 算法是为有向图设计的,但该算法不检查输入图是否有向,而是通过将有向图中的每个有向边转换为两条边来在无向图上执行。
这说明,PageRank 算法是为有向图设计的,但它可以用于无向图。为此,它将无向网络转换为有向网络,方法是用两条有向边(输入和输出)替换每条边。
因此,如果给它一个有向网络,它会根据有向结构计算PageRank。所以要么从无向网络开始:
import networkx as nx
# Undirected Network
D = nx.Graph()
D.add_weighted_edges_from([('A', 'B', 0.5),('A', 'C', 1)])
# Default max number of iterations failed to converge for me
print nx.pagerank(D, max_iter=200)
# Outputs:
{'A': 0.48648648872844047, 'C': 0.32567567418103965, 'B': 0.18783783709051982}
或者如果您已经有一个有向网络,请将其转换为无向网络:
import networkx as nx
# Directed Network
D = nx.DiGraph()
D.add_weighted_edges_from([('A', 'B', 0.5), ('A', 'C', 1)])
# Convert to undirected
G = D.to_undirected()
# Default max number of iterations failed to converge for me
print nx.pagerank(G, max_iter=200)
# Outputs:
{'A': 0.48648648872844047, 'C': 0.32567567418103965, 'B': 0.18783783709051982}