Как преодолеть эту ошибку при использовании kernighan_lin_bisection от Networkx - PullRequest
0 голосов
/ 01 марта 2020

Я хочу использовать kernighan_lin_bisection из Networkx для разделения сетевых данных. Но ошибка ниже обнаружилась, и я застрял. Буду очень признателен, если вы поможете мне преодолеть эту ошибку.

QT ----------------------------- --------------------------------------------

IndexError Traceback (последний вызов был последним) в () 17 для c в init_partition: 18 для n в c: ---> 19 color_map_i [n] = colors [counter] 20 counter = counter + 1 21

IndexError: индекс назначения списка вне диапазона

UNQT ------------------------------- --------------------------------------------

Используемая кодировка и источник данных "200224_04_act.prn" приведены ниже.

QT ---------------------------- -----------------------

G=nx.read_edgelist("200224_04_act.prn",nodetype=int)

colors=["red","blue","green"]
pos=nx.spring_layout(G)


init_nodes=np.array_split(G.nodes(),2)
init_partition=[set(init_nodes[0]),set(init_nodes[1])]
print(init_partition)


from networkx.algorithms.community import kernighan_lin_bisection

color_map_i=["black"]*nx.number_of_nodes(G)
print(color_map_i)
counter=0
for c in init_partition:
    for n in c:
        color_map_i[n]=colors[counter]
    counter=counter+1

print(color_map_i)


nx.draw_networkx_edges(G,pos)
nx.draw_networkx_nodes(G,pos,node_color=color_map_i)
nx.draw_networkx_labels(G,pos)

plt.axis("off")
plt.show()

lst_b=kernighan_lin_bisection(G,partition=init_partition)
color_map_b=["black"]*nx.number_of_nodes(G)

counter=0
for c in lst_b:
    for n in c:
        color_map_b[n]=colors[counter]
    counter=counter+1

nx.draw_networkx_edges(G,pos)
nx.draw_networkx_nodes(G,pos,node_color=color_map_b)
nx.draw_networkx_labels(G,pos)
plt.axis("off")
plt.show()

UNQT ----------------- ---------------------------------------------

«200224_04_act.prn» ниже (количество узлов около 2000, но я сделал его небольшим из-за ограничения числа символов)

   1     415
   2     415
   3     415
   3    1350
   4    1351
   5    1352
   6     383
   7     993
   8    1353
   9     887
  10     887
  11     887
  12     887
  13     887
  14    1185
  15    1185
  16    1185
  17    1185
  18    1185
  19    1146
  20    1146
  21    1146
  22    1146
  21     776
  23     776
  24     707
  25     707
  26     707
  27     707
  28     707
  29     754
  21     754
  30     754
  31     754
  32     754
  33     778
  34     778
  35     778
  36     778
  37     778
  38     859
  39     859
  40    1354
  41     563
  42     563
  43     563
  44     563
  45     563
  46    1209
  47    1209
  48    1209
  49    1209
  50    1209
  51     715
  52     715
  53     715
  54     715
  55     715
  56    1048
  57    1048
  58    1047
  59    1047
  60    1047
  61    1047
  62    1047
  63     718
  64     718
  65     718
  66     718
  67     718
  68     947
  17     947
  69     947
  70     889
  71     744
  72     744
  73     744
  74     744
  75     744
  76    1137
  77    1137
  78    1137
  79    1137
  80     612
  81     612
  82     612
  83     612
  17     612
  84     790
  85     790
  86     790
  87     790
  88     790
  89     922
  90     922
  91     922
  92     922
  93     922
  21     738
  94     738
  95     738
  96     738
  97     738
  98    1355
  81     807
  99     807
  17     807
 100     725
 101     725
  17     725
 102     725
 103     725
  23    1046
 104     661
 105     661
 106     661
 107     661
 108     661
 109     907
 110     907
 111     907
 112     907
 113     907
 114     840
 115     840
 116     840
 117     840
  17     840
 118     759
  23     759
 119     759
  23     761
 120     761
 121     761
 122     761
 123    1356
 124    1265
 125    1265
 126    1265
 127    1265
 128    1265
 129     894
  29     894
 130     894
 131     894
 132     667
 133     667
 124     758
 134     758
 135     758
 122     758
 136     758
 137     471
 138     471

1 Ответ

0 голосов
/ 03 марта 2020

У вас есть

for c in init_partition:
    for n in c:
        color_map_i[n]=colors[counter]
    counter=counter+1

Мне кажется, n будет l oop по всем узлам графа. Я не вижу записей на графике, которые 0. Поэтому, вероятно, узлы пронумерованы от 1 до N, а color_map_i проиндексирован от 0 до N-1. Таким образом, он сломался бы, когда n=N.

Хороший способ поиска ошибок, как это в общем случае, это напечатать n прямо перед строкой, сообщающей об ошибке. Это дало бы понять, в чем проблема.

...