Пользовательский вывод edgelist в сети x

Я пытаюсь реализовать алгоритм Тарьян для практики. Я решил сгенерировать случайный граф, чтобы дать в качестве входных данных для алгоритма, добавляя по одному ребру за раз.

Я сгенерировал случайный график и сохранил его в файле, как показано ниже

from networkx import *
import sys
import matplotlib.pyplot as plt

n = 10  # 10 nodes
m = 20  # 20 edges

G = gnm_random_graph(n, m)

# print the adjacency list to a file
try:
    nx.write_edgelist(G, "test.edgelist", delimiter=',')
except TypeError:
    print "Error in writing output to random_graph.txt"

fh = open("test.edgelist", 'rb')
G = nx.read_adjlist(fh)
fh.close()

Вывод, который я получил в файле test.edgelist, выглядит примерно так.

0,4,{}
0,5,{}
0,6,{}
1,8,{}
1,3,{}
1,4,{}
1,7,{}
2,8,{}
2,3,{}
2,5,{}
3,8,{}
3,7,{}
4,8,{}
4,9,{}
5,8,{}
5,9,{}
5,7,{}
6,8,{}
6,7,{}
7,9,{}

Однако в реализованном мною алгоритме тарджана вход имеет формат

add_edge(1,2)
add_edge(2,3)
....

Я хочу использовать случайно сгенерированный граф в цикле, чтобы дать в качестве входных данных.

Как мне не получить {}? Также, если есть какой-то лучший способ реализовать это, пожалуйста, помогите, так как для массивного набора данных будет трудно сохранить его в одном списке (add_edge() добавляет ребро в список)

1 ответ

Решение

Вы должны отбросить все данные ребер с помощью набора data параметр для False:

nx.write_edgelist(G, "test.edgelist", delimiter=',', data = False)

Выход:

0,3
0,4
0,1
0,8
0,6
0,7

Однако, если вы хотите сохранить ребра в своем собственном формате, используйте цикл как здесь:

from networkx import gnm_random_graph

n = 10  # 10 nodes
m = 20  # 20 edges

G = gnm_random_graph(n, m)

# iterate over all edges
with open('./test.edgelist', 'w') as f:
    for edge in G.edges():
        f.write("add_edge{0}\n".format(edge))

Выход:

add_edge(0, 7)
add_edge(0, 4)
add_edge(0, 8)
add_edge(0, 3)
add_edge(0, 2)
add_edge(1, 5)
add_edge(1, 6)
add_edge(1, 7)
add_edge(2, 5)
add_edge(2, 4)
add_edge(2, 9)
add_edge(2, 8)
add_edge(2, 3)
add_edge(3, 9)
add_edge(3, 5)
add_edge(4, 9)
add_edge(4, 7)
add_edge(5, 9)
add_edge(6, 9)
add_edge(7, 9)
Другие вопросы по тегам