2016-04-12 15 views
0

Tamamen bağlanamayan bir dizi grafikle ilgileniyorum, ör. Burada ve burada düğümlerin izole kümeleri olabilir.Python: bir grafiğin renklenmesiyle numpy.asarray ile ilgili hata

Her düğümden geçen en kısa yol sayısına bağlı olarak, her bir düğüme cmap='jet''dan gelen bir renk vermek istiyorum.

Kod bloğu: grafik bağlı ve hiçbir kümeleri vardır edilir

#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]) 

, ben sorunumuz yok. Grafiğin kümeleri varsa, n_color, sürekli olmayan bir dizi olarak sonuçlanır, çünkü parçalanmış grafik bazı düğümleri (örneğin, 0'dan N'ye gidiyor, tüm düğümler nodes'da grafik parçalanmışsa mevcut değildir) kaybetti.

Bu, bir hata üretir: IndexError: list index out of rangen_color = numpy.asarray([my_shortest_paths[n] for n in nodes]) satırında işaret eder.

  • Sigara parçalanmış grafik: nodes=[0,1,2,3...,N]
  • Parçalanmış grafiği: nodes=[0,2,3,...,N]

Sorum: nasıl inşa edebilirsiniz benim n_color dikkate alarak

düğümler hakkında daha net olmak gerekirse grafiğimde bazı düğümler mevcut olmayabilir? Bence bu soru şu şekildedir: 'u, cmap ile birlikte kullanılmak üzere, ayrık fakat sürekli olmayan bir şekilde nasıl oluşturabilirim?

DÜZENLEME

Ben böylece bazı sınır oluşturarak, n_color=[0,5000,10000,15000,20000,25000,30000,35000,40000,45000,50000] ile çalıştı, ama sonra bu hatayı alıyorum: ValueError: Color array must be two-dimensional.

cevap

1

Sizin my_shortest_paths aslında bir liste ve my_shortest_paths[n] for n in nodes, sizin düğüm dizininizin adını dizininizi olarak kullanıyorsunuz, sorununuzu neden oldu.

Bunun yerine n_color = numpy.asarray([num_short_paths[n] for n in nodes])'u kullanabilirsiniz.

İlgili konular