python-igraph как добавить ребра с весом? - PullRequest
0 голосов
/ 08 мая 2018

python-igraph как добавить ребра с весом?

У меня есть список кортежей типа [('1', '177', 1.0), ('1', '54', 1.0), ('1', '61', 2.0), ('1', '86', 2.0), ('10', '100', 38.0)]. Последним в кортеже является вес ребра от '1' до '177'. Но как это добавить? Я использую

g.add_vertices(vertexList)
g.add_edges(edgelist)

но это неправильно.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

У вас больше нет данных «предварительной обработки», так как этот формат точен для нового метода:

g = Graph.TupleList([(from, to, weight], ...)

еще один пример от автора:

g=Graph.TupleList([("a", "b", 3.0), ("c", "d", 4.0), ("a", "c", 5.0)], weights=True)

Метод доступен с версии 0.6.1, о чем говорит автор здесь: https://answers.launchpad.net/igraph/+question/206397

0 голосов
/ 20 мая 2018

Сначала нам нужно сделать предварительную обработку .

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


from igraph import *

# Here we have 5 edges
a = [('1', '177', 1.0), ('1', '54', 1.0), ('1', '61', 2.0), 
     ('1', '86', 2.0), ('10', '100', 38.0)]    

edge = []
weights = []
# the loop for i is in range(5) because you have 5 edges
for i in range(5):
    for j in range(2):
        k =2
        edge.append(a[i][j])
    weights.append(a[i][k])

edges = [(i,j) for i,j in zip(edge[::2], edge[1::2])]

list1 = []
for i in range(len(edges)):
    list1.append((int(edges[i][0]), int(edges[i][1])))

g= Graph()
g.add_vertices(178)
g.add_edges(list1)
g.es['weight'] = weights

g.ecount()
5

g.es['weight']
[1.0, 1.0, 2.0, 2.0, 38.0]
...