Ввод графика для поиска графика scipy - PullRequest
0 голосов
/ 30 октября 2018

На основании примеров, которые я могу найти для scipy graph_search , кажется, что он принимает форму NxN для входного графа, где индексная пара графа равна этому значению.

так матрица

G = [ [0,5,2],
      [3,0,8],
      [12,7,0] ]  

означает, что вес ребра 2->1 является значением индекса G[1,0] = 3

Если это не так, пожалуйста, объясните.

Проблема, с которой я столкнулся, заключается в эффективном вводе соединений с узлами таким образом, начиная со словаря, где ключ - это узел, а значение - массив связанных узлов.

{'node1' : [node2,weight1],[node3,weight2]} где край node1->node2 = weight1

Я могу перебрать цикл ключей и создать новый массив [ [node1,node2,,weight1],[node1,node3,weight2] ], но это также не сильно приближает меня к формату scipy. Есть ли простой способ сделать это преобразование из словаря или итеративного массива, который я могу сделать?

1 Ответ

0 голосов
/ 30 октября 2018

Предполагая, что вы уже знаете число N узлов в вашем графике и ваш график направлен, вы можете сделать это следующим образом:

def create_csgraph_matrix(d, N):
    M = np.zeros((N,N))
    for i in d:
        for l in d[i]:
            j = l[0]
            weight = l[1]
            M[i, j] = weight
    return M

где d - словарь вашей формы. Пример:

In [38]: d = {0: [[1, 10], [2, 20]], 2: [[1, 15]]}

In [39]: create_csgraph_matrix(d,3)
Out[39]: 
array([[ 0., 10., 20.],
       [ 0.,  0.,  0.],
       [ 0., 15.,  0.]])

Обратите внимание, что узлы на этом графике равны 0,1,2.

...