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
我正在尝试重现以下二分网络图像:
我试过了:
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