1、networkx实现er随机网络
import networkx as nx
import matplotlib. pyplot as plt
import numpy as np
import pandas as pd
import random
'''
(1)初始化:给定N个节点以及连边概率p∈[0,1]
(2)随机连边:
①随机选取一对没有边相连的不同的节点
②生成一个随机数r∈[0,1]
③如果r<p,那么在这对节点之间添加一条边;否则就不添加
④重复步骤①~③,直至所有节点对都被选择一次
'''
class ERModel :
EdgeNum = 0
def __init__ ( self, NodeNum, Probability) :
self. NodeNum = NodeNum
self. Probability = Probability
def ERNetworkAdjancyMatrix ( self) :
N = list ( range ( self. NodeNum) )
G_ER = nx. Graph( )
G_ER. add_nodes_from( N)
AdjacencyMatrix = np. zeros( ( self. NodeNum, self. NodeNum) , dtype= int )
AdjacencyMatrix[ 0 ] [ 0 ] = 0
for i in range ( 1 , self. NodeNum) :
for j in range ( i + 1 , self. NodeNum) :
probability = random. random( )
if probability < self. Probability:
self. EdgeNum += 1
AdjacencyMatrix[ i] [ j] = AdjacencyMatrix[ j] [ i] = 1
else :
AdjacencyMatrix[ i] [ j] = AdjacencyMatrix[ j] [ i] = 0
return AdjacencyMatrix
def ERNetworkGraph ( self, AdjacencyMatrix) :
G_ER = nx. Graph( )
for i in range ( len ( AdjacencyMatrix) ) :
for j in range ( len ( AdjacencyMatrix) ) :
if AdjacencyMatrix[ i] [ j] == 1 :
G_ER. add_edge( i, j)
return G_ER
er = ERModel( 94 , 0.1 )
adj = er. ERNetworkAdjancyMatrix( )
G_ER = er. ERNetworkGraph( adj)
pos= nx. circular_layout( G_ER)
nx. draw( G_ER, pos)
plt. show( )