前提・実現したいこと
現在大学学部三年生でネットワークの勉強をしています.
pythonのライブラリであるNetworkxを用いて重みありのスモールワールドネットワークのグラフを作成し,その重み成分を二次元配列として取り出したい方法がわかりません.もしよろしければ相談乗っていただけると幸いです.
また,ネットワークの構築方法そのものに対して何かツッコミどころがあれば助言くださると嬉しいです.
よろしくお願いします.
python
1### 該当のソースコード 2import networkx as nx 3import matplotlib.pyplot as plt 4import numpy as np 5from numpy.random import * 6 7#グラフオブジェクトの作成 8G = nx.Graph() 9 10#n個のノードオブジェクトを作成 11nodes = np.array(range(1,n+1)) 12 13#エッジの空のリストを作成 14edges=[] 15 16#始めのエッジの重みの初期重み :i行j列の乱数がi番目のノードとj番目のノード 間のエッジの重みになる 17reservoir_weights = np.random.rand(n,n) - 0.5 #-0.5~0.5の一様乱数 18 19#n:ノード 数,k:隣接するノードへのリンクの数,p:各リンクの繋ぎかえ確率 20n = 100 21k = 5 22p = 0.1 23 24#レギュラーグラフを作成 25for i in range(1,n+1): 26 for j in range(1, k+1): 27 v = i 28 u = i + j 29 if u > n: 30 u = u % (n + 1) + 1 31 32 tpl = (nodes[v-1], nodes[u-1],reservoir_weights[i-1, u-1]) 33 edges.append(tpl) 34 35G.add_weighted_edges_from(edges) 36 37#確率p=0.1でエッジをつなぎ変えてスモールワールドネットワークを作成 38for i in range(1, n+1): 39 for j in range(1, k+1): 40 if random() < p: 41 v = i 42 old_u = i + j 43 if old_u > n: 44 old_u = old_u % (n +1) + 1 45 new_u = randint(1, n) 46 while v != new_u and G.has_edge(v, new_u): 47 new_u = randint(1,n) 48 49 tpl = (nodes[v-1], nodes[new_u-1],reservoir_weights[i-1, new_u-1]) 50 edges.append(tpl) 51 G.remove_edge(v,old_u) 52 53G.add_weighted_edges_from(edges) 54 55#グラフのエッジの重みを表示 56G.edges(data = True)
インデントが消されたりコメントがmarkdownとして解釈されたりと読めたものではないので、https://teratail.com/tour を参考にシンタックスハイライト・マークダウンでコード部分を囲み適切に表示されるようにしてください。質問は再編集できます。
あなたの回答
tips
プレビュー