#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, возможно, формат недостаточно широко используется…