Сохранение/получение атрибутов igraph Graph

Я пытаюсь сохранить, а затем получить график igraph с атрибутами графика. В частности, у меня есть граф с двумя терминалами, и я сохраняю источник и приемник как атрибуты графа, поэтому я могу извлекать их в постоянное время. Обратите внимание, что вершины не расположены в каком-либо определенном порядке (например, первая вершина является источником, а последняя — приемником).

Я просмотрел документацию, но не вижу, чтобы какой-либо из форматов поддерживал сохранение/извлечение атрибутов графа. Я что-то упустил?

Мой запасной вариант — использовать логические атрибуты исходной/приемной вершины, но это занимает больше места и требует линейного времени для извлечения правильных вершин.


person Tim    schedule 29.12.2017    source источник


Ответы (1)


GraphML поддерживает числовые и строковые атрибуты, которые можно прикрепить ко всему графу, к отдельным вершинам или к отдельным ребрам ( на самом деле он поддерживает даже более сложные, но реализация GraphML в igraph ограничена числовыми и строковыми атрибутами). Итак, вы можете использовать Graph.write_graphml() и Graph.Read_GraphML(). Кроме того, вы можете просто сохранить граф igraph, используя модуль Python pickle (т. е. использовать pickle.dump() и pickle.load()), и вы получите обратно все атрибуты графа/вершины/ребра (даже сложные объекты Python) — единственная загвоздка в том, что формат pickle не взаимодействует с другими инструментами за пределами мира Python.

person Tamás    schedule 03.01.2018
comment
Отличный ответ. Это поставило меня на правильный путь. GraphML не захватывал атрибуты, потому что атрибуты указывали на объекты вершин. Когда я пытался замариновать, это также дало TypeError, потому что вы не можете замариновать объекты Vertex. (Не уверен, почему, но в любом случае...) Итак, я решил это, сохранив индексы источника/приемника (т.е. целые числа) в атрибуте графа, а не непосредственно в объектах вершин. Опять же, хороший ответ. - person Tim; 04.01.2018