generic_weighted_projected_graph#
- generic_weighted_projected_graph(B, nodes, weight_function=None)[source]#
用户指定权重函数的B的加权投影。
二分网络B被投影到指定的节点上,其权重由用户指定的函数计算。该函数必须接受两个节点的邻域集作为参数,并返回一个整数或浮点数。
节点保留其属性,并且在生成的图中如果它们在原始图中有一条共同的边相连。
- Parameters:
- BNetworkX图
输入图应该是二分的。
- nodes列表或可迭代对象
要投影到的节点(“底部”节点)。
- weight_function函数
该函数必须接受与本函数相同的输入图和两个节点作为参数,并返回一个整数或浮点数。默认函数计算共享邻居的数量。
- Returns:
- GraphNetworkX图
投影到给定节点的图。
See also
is_bipartiteis_bipartite_node_setsetsweighted_projected_graphcollaboration_weighted_projected_graphoverlap_weighted_projected_graphprojected_graph
Notes
没有尝试验证输入图B是否为二分图。图和节点的属性被(浅层)复制到投影图中。
有关NetworkX中如何处理二分图的更多详细信息,请参阅:mod:
bipartite文档。Examples
>>> from networkx.algorithms import bipartite >>> # 定义一些自定义权重函数 >>> def jaccard(G, u, v): ... unbrs = set(G[u]) ... vnbrs = set(G[v]) ... return float(len(unbrs & vnbrs)) / len(unbrs | vnbrs) >>> def my_weight(G, u, v, weight="weight"): ... w = 0 ... for nbr in set(G[u]) & set(G[v]): ... w += G[u][nbr].get(weight, 1) + G[v][nbr].get(weight, 1) ... return w >>> # 一个包含4个节点和4条边的完全二分图 >>> B = nx.complete_bipartite_graph(2, 2) >>> # 为边添加一些任意权重 >>> for i, (u, v) in enumerate(B.edges()): ... B.edges[u, v]["weight"] = i + 1 >>> for edge in B.edges(data=True): ... print(edge) (0, 2, {'weight': 1}) (0, 3, {'weight': 2}) (1, 2, {'weight': 3}) (1, 3, {'weight': 4}) >>> # 默认情况下,权重是共享邻居的数量 >>> G = bipartite.generic_weighted_projected_graph(B, [0, 1]) >>> print(list(G.edges(data=True))) [(0, 1, {'weight': 2})] >>> # 要指定自定义权重函数,请使用weight_function参数 >>> G = bipartite.generic_weighted_projected_graph( ... B, [0, 1], weight_function=jaccard ... ) >>> print(list(G.edges(data=True))) [(0, 1, {'weight': 1.0})] >>> G = bipartite.generic_weighted_projected_graph( ... B, [0, 1], weight_function=my_weight ... ) >>> print(list(G.edges(data=True))) [(0, 1, {'weight': 10})]