python - 创建一个有向图,其中进(出)度分布是无标度的
问题描述
我想创建一个有向图,其中只有进(出)度分布是无标度的。最好我想在python(networkx)中实现它。我在networkx中没有找到任何实现。
先感谢您。
解决方案
所以解决方案是使用networkX。关键是这种配置模型,您可以在其中分别为进出学位分配学位列表。所以我为 in_degree 分配了一个幂律度数序列,我对其进行了扰动以使分布不是幂律......瞧......:D
import networkx as nx
import ndlib.models.ModelConfig as mc
import ndlib.models.epidemics as ep
from ndlib.viz.mpl.DiffusionTrend import DiffusionTrend
from ndlib.viz.bokeh.MultiPlot import MultiPlot
from ndlib.viz.bokeh.DiffusionPrevalence import DiffusionPrevalence
from bokeh.io import output_notebook, show
from pprint import pprint
import json, re, demjson
import sys
import random
import matplotlib.pyplot as plt
def plot_degree_dist(G):
in_degrees = G.in_degree()
in_degrees=dict(in_degrees)
in_values = sorted(set(in_degrees.values()))
in_hist = [list(in_degrees.values()).count(x) for x in in_values]
plt.subplot(2,1,1)
plt.grid(False)
plt.loglog(in_values, in_hist, 'r.')
plt.xlabel('k')
plt.ylabel('p(k)')
plt.title('In Degree Distribution')
out_degrees = G.out_degree()
out_degrees=dict(out_degrees)
out_values = sorted(set(out_degrees.values()))
out_hist = [list(out_degrees.values()).count(x) for x in out_values]
plt.subplot(2,1,2)
plt.grid(False)
plt.loglog(out_values, out_hist, 'r.')
plt.xlabel('k')
plt.ylabel('p(k)')
plt.title('Out Degree Distribution')
plt.show()
while True:
s=[]
while len(s)<2500:
nextval = int(nx.utils.powerlaw_sequence(1, 2.5)[0]) #100 nodes, power-law exponent 2.5
if nextval!=0:
s.append(nextval)
if sum(s)%2 == 0:
break
din = s
z = [0]*len(s)
for k in range(len(s)):
randnum = int(random.uniform(0,1)*30)
if random.uniform(0,1)>0.1:
z[k]=s[k]+randnum
z[len(s)-k-1]=s[len(s)-k-1]-randnum
else:
z[k] = s[k]
z[len(s)-k-1] = s[len(s)-k-1]
if k==int(len(s)/2.0-1):
break
print(sum(s),sum(z))
dout = z
G = nx.directed_configuration_model(din,dout)
G=nx.DiGraph(G) # remove parallel edges
G.remove_edges_from(G.selfloop_edges())
plot_degree_dist(G)
推荐阅读
- c# - c# Json.net 不可变类
- java - 如何使用 cucumber 和 selenium 在一个 java 类中定义所有步骤定义?
- python-3.x - 使用 pygame 在 Python 中编程
- java - 使用 IOException 编写类后无法创建 JAXBContext
- php - 如何在codeigniter中选择最大数据
- vba - 从多个工作簿复制具有不同列和工作表名称的数据 - VBA
- html - 使用 ASP.NET MVC Helpers 自定义样式的单选按钮
- pyspark - Pyspark:添加新列的行值总和超过 255 列
- arrays - 尝试看看是否有更好的方法来重建对象
- html - 如何使嵌入式 Twitter 提要在尺寸上响应较小的屏幕?