Как обновить объект python igraph с новым членством в кластере? - PullRequest
0 голосов
/ 29 января 2020

Как мне обновить график igraph с результатами моего метода кластеризации?

Я выполнил некоторую кластеризацию в Python.

Например, у меня есть igraph объект графа:

# Generate a graph with 100 nodes and 250 edges.
import igraph
g = igraph.Graph.Erdos_Renyi(n=100,m=250) 

Затем я применяю свой алгоритм кластеризации. В этом случае, например, я просто произвольно назначаю каждый узел кластеру 0-3.

# Make a random partition of 4 clusters.
from random import randint
partition = [randint(0,3) for x in range(100)]

Я могу сгенерировать объект кластеризации igraph:

# Cluster the graph.
clusters = igraph.VertexClustering(g,membership = partition)

Это позволяет мне получить доступ ко всем полезным методам этого класса, например:

clusters.modularity

Но я хотел бы обновить исходный график g с результатами моей кластеризации.

# Checks.
clusters.membership == partition # True
clusters.graph.clusters().membership == partition # False - I want this to be True.

Есть ли способ, которым я могу это сделать?

1 Ответ

1 голос
/ 09 марта 2020

Метод Graph.clusters() возвращает новый объект VertexClustering каждый раз, когда он вызывается, кластеризация никогда не сохраняется как часть графа.

Если вам действительно нужно сохранить кластеризацию в графическом объекте , вы всегда можете использовать setattr.

>>> setattr(g, "clustering", clusters)
>>> clusters.graph.clustering.membership == partition
True

Если вы протравите объект, кластеры останутся.

>>> import pickle
>>> pickle.dump(g, open("graph.pickle", "wb"))
>>> ng = pickle.load(open("graph.pickle", "rb"))
>>> ng.clustering.membership == partition
True
...