2016-05-13 8 views
1

Wie konvertieren Sie die Blockmitgliedschaften für jeden Knoten in einem Überlappungsblock-Status in ein numpy Array?Diagramm-Werkzeug Überlappungsblock Objekt

Insbesondere dann, wenn eine überlappende Blockobjekt Folgern, es sieht aus wie die überlappende Mitgliedschaft Array mit wiederhergestellt werden können

blockobject = gt.minimize_blockmodel_dl(g, overlap = True) 
blockpropertyvector = blockobject.get_overlap_blocks()[0] 

Um dies in eine numpy Array zu umwandeln, es scheint, dass wir eine Vorstellung von der maximal haben brauchen Anzahl der Mitgliedschaften für einen bestimmten Knoten (nennen wir es max_overlaps) und dann können wir zu einem 2D-Array

blockpropertyvector.get_2d_array(range(max_overlaps)) 

Aber jetzt bin ich nicht sicher, umwandeln, wie das Ergebnis zu interpretieren. Stimmt es, dass die erste Zeile dieser Matrix die erste Zugehörigkeitszuordnung für jeden Knoten ist? Wenn ja, dann möchte ich sagen, dass die zweite Zeile die zweite Mitgliedschaftszuweisung für einen Knoten ist, wenn sie existiert, und andernfalls. Aber 0 ist eine mögliche Blocknummer, woher wissen wir, ob der 0-te Block eine überlappende Mitgliedschaft enthält?

Antwort

1

In der Tat werden Sie auf diese Weise nicht in der Lage sein, fehlende Mitgliedschaft von einer Mitgliedschaft zu Gruppe Null zu unterscheiden.

ich die einfachste Sache denken Sie einfach Schleife tun können, über die Knoten ist:

bv = state.get_overlap_blocks()[0] 
b = zeros((g.num_vertices(), max_B)) 
for v in g.vertices(): 
    b[int(v),:len(b[v])] = bv[v].a + 1 

Mit dem oben, der Wert Null bedeutet, Mangel an Mitgliedschaft, und einen Wert von r> 0 bedeutet, die Mitgliedschaft zu einer Gruppe r - 1.

+0

Ich denke, die richtige Wahl in der letzten Zeichenfolge wäre dies: ': len (bv [v] .a)' anstelle von ': len (b [v])' weil der letzte jedes Mal zurückkehrt 'max_B' Wert – lucidyan