Networkx - 投影图中的 Katz 中心性

Networkx - Katz centrality in projected graphs

我正在尝试重现以下二分网络图像:

我试过了:

bi_graph = nx.Graph()
bi_graph.add_edges_from([(1,"a"), (2,"a"), (2,"b"), (3,"a"), (3,"b"), (4,"b"), (4,"c"), (5,"b"), (5,"d"), (6,"c"), (6,"d"), (7, "d")])
pos = nx.bipartite_layout(bi_graph, nodes= [1, 2, 3, 4, 5, 6, 7])
nx.draw(bi_graph, pos=pos, with_labels=True, node_color='pink')
plt.title('rede bipartida')
plt.show()


现在我需要做两个图形投影:

一个字母

projection_letters = nx.bipartite.projected_graph(bi_graph, ["a", "b", "c", "d"])

nx.draw(projection_letters, with_labels=True, node_color='gray')
plt.title('projeção (vértices do tipo letras)')
plt.show()

一个数字

projection_numbers = nx.bipartite.projected_graph(bi_graph, [1, 2, 3, 4, 5, 6, 7])

nx.draw(projection_numbers, with_labels=True, node_color='pink')
plt.title('projeção (vértices do tipo número)')
plt.show()


最后我需要计算两件事:

-katz 中心性 projection_numbers 并找到 alpha=0.15 的最低和最高节点值,如下所示:

print('Katz:')
alpha = 0.15
for node, val in nx.katz_centrality(projection_numbers,alpha=alpha).items():
    print("%s %.2f" % (node, val))

打印:

1 0.29 (low)
2 0.41
3 0.41
4 0.41
5 0.45 (high)
6 0.35
7 0.29

虽然低点和高点是节点 1 和 5,但我得到的答案是错误的..


-计算 projection_letters 的最高 alpha 值,我被告知它是最高 engeinvalue 的倒数。

如何计算这个顶部 alpha

要找到最大的 alpha 值,您首先需要计算 projection_letters 图的邻接矩阵的特征值(查看更多信息 here),然后计算最大的逆矩阵绝对特征值。

您可以使用 nx.adjacency_spectrum (doc) 提取特征值集。

查看下面的完整代码:

adj_mat_proj_letters_spec=nx.adjacency_spectrum(projection_letters) 
alpha_max=1/np.amax(np.abs(adj_mat_proj_letters_spec))
print('Max alpha: ' +str(alpha_max))

并且输出returns:

Max alpha: 0.460811127189111