私は(「ネットワークの効率性は、それが情報を交換する方法を効率的の尺度である」)の情報が、これらの二つのネットワークそのために
に広がるか、あなたはefficiencyを使用することができます比較したいです。 これはnetworkxで1/Lとして計算できます.Lはaverage shortest path lengthです。
以下のコードでは、Gはスケールフリーグラフ(scale_free_graph
で生成)、Hはランダムグラフ(gnp_random_graph
で生成)です。両方のグラフのノード数は同じです(200)。このように、彼らはより匹敵します。
import networkx as nx
G = nx.scale_free_graph(200)
H = nx.gnp_random_graph(200, 0.5)
print("Efficiency for G:", 1.0/nx.average_shortest_path_length(G))
print("Efficiency for H:", 1.0/nx.average_shortest_path_length(H))
以下の出力は、コードを実行するたびに(グラフはランダムに生成されます)、それぞれ異なります。複数のスケールフリー/ランダムグラフを作成し、その平均効率を求めて値を比較することができます。
Efficiency for G: 3.67192545437771
Efficiency for H: 0.6666890013065765
グラフを比較するときにはもちろん、他のネットワーク指標、たとえばaverage clusteringなど
あなたのタイトルに質問があります。
スケールフリーとランダムネットワークの比較方法を教えてください。
スケールフリーとランダムネットワークの違いを示す最も直感的な方法は、(ランク/ソートされた)ノードの度数をプロットすることです。
以下の画像から、スケールフリーでランダムネットワークをすぐに推測できます。
Iは、次のコード(G及びHは、以前からのグラフである)を用いて画像を得ました。
import matplotlib.pyplot as plt
degree_sequence = sorted(nx.degree(G).values(), reverse=True)
plt.plot(degree_sequence, 'b-')
degree_sequence = sorted(nx.degree(H).values(), reverse=True)
plt.plot(degree_sequence, 'r-')
plt.ylabel("degree")
plt.xlabel("rank")
plt.show()
ノード度(degree_sequence
)がランダムに生成グラフに依存するので、もちろん、わずかに異なる画像を取得します。
最後のヒント:複数のスケールフリーグラフをプロットする場合は、ログログプロットの使用を検討してください。
出典
2017-01-14 10:21:41
edo