2016-04-12 8 views
0

完全に接続されていない可能性のある一連のグラフを扱っています。ノードの孤立したクラスタが存在する可能性があります。Python:グラフの色付け中にnumpy.asarrayでエラーが発生する

各ノードを通過する最短パスの数に基づいて、各ノードにcmap='jet'からの色を付けたいとします。

コードブロック:

#Given my fragmented graph F, count the shortest paths passing through each node: 
def num_spaths(F): 
      num_spaths = dict.fromkeys(F, 0.0) 
      spaths = nx.all_pairs_shortest_path(F) 
      for source in F: 
       for path in spaths[source].values(): 
        for node in path[1:]: 
         num_spaths[node] += 1 
      return num_spaths 

num_short_paths=num_spaths(F) #Calling the function on F 

my_shortest_paths = num_short_paths.values() #Getting the dict values 
nodes = F.nodes() #Storing the nodes in F 
#Determining the number of colors 
n_color = numpy.asarray([my_shortest_paths[n] for n in nodes]) 

グラフが接続されていたクラスタが存在していない場合、私は何の問題もありません。グラフがクラスタを有する場合、n_colorは、断片化されたグラフがいくつかのノードを失ったため(例えば、グラフが断片化されている場合、すべてのノードがnodesに存在するわけではない)、非連続配列になる。

IndexError: list index out of rangeは、n_color = numpy.asarray([my_shortest_paths[n] for n in nodes])という行を指すエラーを生成します。

ノードについてもっと明確にする:

  • 非断片化されたグラフ:nodes=[0,1,2,3...,N]
  • 断片化されたグラフ:nodes=[0,2,3,...,N]

私の質問:どのように考慮して、私のn_colorを構築することができます一部のノードがグラフに表示されないことがありますか?私はこの質問が対応していると思います:どうすればcmapと一緒に使用するために、離散的ではあるが非連続的なnumpy_arrayを構築できますか?

EDIT

は、私はこのようにいくつかの境界を作成し、n_color=[0,5000,10000,15000,20000,25000,30000,35000,40000,45000,50000]で試してみましたが、その後、私はこのエラーを取得:ValueError: Color array must be two-dimensional

答えて

1

あなたのmy_shortest_pathsは実際にはリストであり、my_shortest_paths[n] for n in nodesによって、あなたの問題の原因となったリストのインデックスとしてノード名が使用されています。

代わりにn_color = numpy.asarray([num_short_paths[n] for n in nodes])を使用してください。

関連する問題