2016-04-19 9 views
2

Ich lerne Python-igraph und habe Schwierigkeiten bei der Verarbeitung eines Graphen, der in Komponenten unterteilt ist (die nicht miteinander verbunden sind). Wenn ich einen der Clustering-Algorithmen auf dieses Diagramm anwende, scheint es nicht richtig zu funktionieren, und deshalb muss ich die Algorithmen separat auf jeden Untergraphen (Komponente) anwenden. Um also die Identifizierung der Scheitelpunkte beizubehalten, möchte ich ein Scheitelpunktattribut hinzufügen, das mir die ID-Nummer im ursprünglichen Graphen gibt. Mein Graph wird aus einer weighted adjacency Matrix aufgebaut:Hinzufügen von Scheitelpunktattributen zu einem gewichteten Graphen in Python

import numpy as np 
import igraph 

def symmetrize(a): 
    return a + a.T - 2*np.diag(a.diagonal()) 

A = symmetrize(np.random.random((100,100))) 

G = igraph.Graph.Adjacency(A.tolist(),attr="weight",mode="UPPER") 

Ich sehe, dass es eine Möglichkeit, vertex attributes hinzuzufügen sein sollte, aber ich verstehe nicht, wie es zu benutzen ..

Antwort

2

ein Vertex-Attribut für alle Hinzufügen der Eckpunkte funktioniert wie folgt:

G.vs["attr"] = ["id1", "id2", "id3", ...] 

Sie können auch ein Vertex-Attribut auf einen einzelnen Scheitelpunkt befestigen:

G.vs[2]["attr"] = "id3" 

Zum Beispiel, wenn Sie einfach eine eindeutige Kennung, die alle Ecken benötigen, können Sie dies tun:

G.vs["original_id"] = list(range(G.vcount())) 

(Sie brauchen nicht die list() Teil, wenn Sie auf Python 2.x als range() bereits sind erstellt eine Liste).