随机图中心度统计Python代码

import networkx as nx
import random

# 创建一个随机图实例
def generate_random_graph(num_nodes, prob_edge):
    G = nx.erdos_renyi_graph(num_nodes, prob_edge)
    return G

# 计算节点度中心性
def calculate_degree_centrality(G):
    degree_centrality = nx.degree_centrality(G)
    return degree_centrality

# 计算多个随机图实例下的节点度中心性的平均值
def calculate_average_degree_centrality(num_instances, num_nodes, prob_edge):
    average_degree_centrality = {}
    for _ in range(num_instances):
        random_graph = generate_random_graph(num_nodes, prob_edge)
        degree_centrality = calculate_degree_centrality(random_graph)
        
        # 累加节点度中心性
        for node, centrality in degree_centrality.items():
            if node in average_degree_centrality:
                average_degree_centrality[node] += centrality
            else:
                average_degree_centrality[node] = centrality
    
    # 取平均值
    for node in average_degree_centrality:
        average_degree_centrality[node] /= num_instances
    
    return average_degree_centrality

# 示例用法
num_instances = 10000  # 随机图实例的数量
num_nodes = 50     # 节点数量
prob_edge = 0.2     # 边的概率

average_degree_centrality = calculate_average_degree_centrality(num_instances, num_nodes, prob_edge)
print("平均度中心性:")
for node, centrality in average_degree_centrality.items():    
    if centrality == 1:    
        print(f"Node {node}: {centrality}")