【问题标题】:How do I update a python igraph object with new cluster membership?如何使用新的集群成员更新 python igraph 对象?
【发布时间】:2020-03-10 00:55:13
【问题描述】:

如何使用聚类方法的结果更新 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.

有什么办法可以做到吗?

【问题讨论】:

    标签: python cluster-analysis igraph


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 2017-03-17
      • 2019-07-30
      • 2021-06-08
      • 2013-12-13
      • 2021-01-15
      • 1970-01-01
      相关资源
      最近更新 更多