Zentralitätsmaße für einzelne Knoten

  • Ich produziere ein Diagramm, das von einer Liste benachbarter Knoten erstellt wird. (Die Liste sieht wie {1 ->583, 1->2977, 2->14, 4->1293, 5->221, ...} aus. Jeder Knoten meines Graphen ist eine Zahl.

    Ich wollte die Zentralitätskennzahlen für diesen Graphen abrufen, also habe ich verwendet:

     bc = BetweennessCentrality[graph1]
     

    Dies ergibt die gesamte Liste der Zentralitätskennzahlen (in der Reihenfolge, in der die Knoten in meiner Liste stehen, denke ich?)

     {6., 0., 0., 0., 0., 3., 5., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 
    1., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 
    0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.}
     

    Ich möchte einen Weg finden, um das Zentralitätsmaß für einen genauen Knoten zu erhalten, beispielsweise Knoten 2. Ich kenne nur diesen Weg:

     bc[[2]]
     

    Dies gibt mir jedoch nur den zweiten Eintrag in der erhaltenen Liste , nicht das Zentralitätsmaß für Knoten Nr. 2. Was ich wirklich brauche, ist das Erstellen einer Liste mit den ersten 10 Knoten in meinem Graphen und ihren jeweiligen Zentralitätsmaßen.

    16 February 2012
    Szabolcs
3 answers
  • Wichtiger Hinweis: Die Reihenfolge, in der BetweennessCentrality (oder eine andere auf Diagramm bezogene Funktion, einschließlich AdjacencyMatrix) Ergebnisse zurückgibt, ist nicht Entspricht der Reihenfolge, in der Sie Scheitelpunkte an Graph übergeben haben, und auch nicht die lexikographische Reihenfolge der Scheitelpunkte. In dieser Reihenfolge gibt VertexList Scheitelpunkte zurück.

    Missverständnisse darüber sind eine häufige Fehlerquelle, daher hielt ich es für wichtig um das auszudrücken. Verlassen Sie sich nicht auf den Knoten n, der dem n -ten Element in der Ergebnisliste entspricht. Verwenden Sie immer VertexList!

    Nun können Sie auf einfache Weise herausfinden, ob die Mittigkeit von vertex

    Pick[BetweennessCentrality[graph], VertexList[graph], vertex]

    Leider scheint es nicht möglich zu sein, das Ergebnis nur für einen Scheitelpunkt zu berechnen.

    Um zu erhalten Die Zentralität mehrerer Knoten, die in der Liste vertices enthalten sind, verwenden Sie

     Pick[BetweennessCentrality[graph], VertexList[graph], Alternatives @@ vertices]
     

    , um alle Scheitelpunkte anzuzeigen Namen, die mit ihren Zentralitäten in einer Tabelle gepaart sind, können Sie

     Grid[Transpose[{VertexList[graph], bc}]]
     
    verwenden
    18 February 2012
    Szabolcs
  • Es gibt eine Funktion, die Ihnen einen Vertex-Index gibt:

     bc[[VertexIndex[graph, vertex]]]
     
    25 February 2012
    Szabolcs
  • Diagrammfunktionen in Mathematica 8 geben die Ergebnisse pro Scheitelpunkt entsprechend der Reihenfolge der Scheitelpunkte in VertexList[graph] zurück. Das heißt, intern werden die Scheitelpunkte in der Reihenfolge beschriftet, in der sie dem Diagramm hinzugefügt werden, und die Scheitelpunktliste enthält nur extrinsische Beschriftungen (die von einem beliebigen Typ sein können).

    Um Ihre spezifische Frage zu beantworten, können Sie den Zentralitätswert zwischen zwei Zentralpunkten für den Scheitelpunkt mit einem bestimmten Label abrufen:

     In[1]:= l = Table[DirectedEdge[i, i + 1], {i, 4}];
    
    In[2]:= g1 = Graph[l];
    
    In[3]:= VertexList[g1]
    
    Out[3]= {1, 2, 3, 4, 5}
    
    In[4]:= BetweennessCentrality[g1]
    
    Out[4]= {0., 3., 4., 3., 0.}
    
    In[5]:= g2 = Graph[RotateLeft[l, 1]];
    
    In[6]:= BetweennessCentrality[g2]
    
    Out[6]= {3., 4., 3., 0., 0.}
    
    In[7]:= VertexList[g2]
    
    Out[7]= {2, 3, 4, 5, 1}
    
    In[8]:= BetweennessCentrality[
      g2][[Position[VertexList[g2], 2][[1, 1]]]]
    
    Out[8]= 3.
     

    In der Praxis möchten Sie wahrscheinlich eine Dispatch-Tabelle erstellen, um Vertex-Ordnungszahlen in Scheitelpunkt-Bezeichner umzuschreiben und umgekehrt. Dies ist einfach, wenn Sie etwas wie

     MapIndexed[#2[[1]]->#1&,VertexList[g]]//Dispatch (* creates ordinal to id map *)
     
    tun
    16 February 2012
    lubos hasko