Использование формата graph6 с помощью graph-tool

#graph #graph-tool

#График #graph-tool

Вопрос:

Я загрузил кучу графиков из http://users.cecs.anu.edu.au /~bdm/data/graphs.html и я хочу провести кое-какой анализ. Я хочу использовать graph-tool для этого модуль Python, но я не могу найти удобный способ преобразования из graph6 формата в формат graph-tools , совместимый с. Должен быть простой способ сделать это… любая помощь будет оценена.

— РЕДАКТИРОВАТЬ: возможным решением является преобразование из формата g6 в формат gt … но я не нашел никаких инструментов, которые это делают.

Ответ №1:

graph6 Формат выглядит раздражающим для работы, но, к счастью, в документации упоминается инструмент, названный showg для печати графиков. Легко просто проанализировать выходные данные этой программы.

Сначала создайте showg инструмент. (Используйте clang или gcc в зависимости от вашей системы. Или просто загрузите двоичный файл, который они предоставляют на своем веб-сайте.)

 $ curl -s http://users.cecs.anu.edu.au/~bdm/data/showg.c > showg.c
$ clang -o showg showg.c
$ ./showg --help
 

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

 $ curl -s http://users.cecs.anu.edu.au/~bdm/data/graph4.g6 > graph4.g6

$ ./showg -p10 -e graph4.g6

Graph 10, order 4.
4 5
0 2  0 3  1 2  1 3  2 3
 

Вот простой скрипт, который считывает список ребер ./showg -p<N> -e и создает graph_tool.Graph объект:

 # load_graph.py
import sys
import graph_tool as gt

# Read stdin and parse last line as a list of edge pairs
line = sys.stdin.readlines()[-1]
nodes = [int(n) for n in line.split()]
n0 = nodes[0::2]
n1 = nodes[1::2]
edges = list(zip(n0, n1))

# Load graph
g = gt.Graph()
g.add_edge_list(edges)

print("Loaded graph with the following edges:")
print(g.get_edges())

 

Давайте попробуем:

 $ ./showg -p10 -e graph4.g6 | python load_graph.py
Loaded graph with the following edges:
[[0 2]
 [0 3]
 [1 2]
 [1 3]
 [2 3]]

 

Комментарии:

1. Спасибо! Я работал в том же направлении, но надеялся, что есть какая-то хорошая альтернатива. Жаль, что graph-tool не предоставляет эффективного загрузчика для graph6, возможно, формат недостаточно широко используется…