NetworkX: Wie kann man eine Inzidenzmatrix eines gewichteten Graphen erstellen?

Nachdem ein Raster-Netzwerk wie folgt erstellt wurde:

from __future__ import division import networkx as nx from pylab import * import matplotlib.pyplot as plt %pylab inline ncols=10 N=10 #Nodes per side G=nx.grid_2d_graph(N,N) labels = dict( ((i,j), i + (N-1-j) * N ) for i, j in G.nodes() ) nx.relabel_nodes(G,labels,False) inds=labels.keys() vals=labels.values() inds=[(Nj-1,Ni-1) for i,j in inds] pos2=dict(zip(vals,inds)) 

Und jeder Kante ein Gewicht entsprechend seiner Länge zugeordnet hat (in diesem trivialen Fall alle Längen = 1):

 #Weights from math import sqrt weights = dict() for source, target in G.edges(): x1, y1 = pos2[source] x2, y2 = pos2[target] weights[(source, target)] = round((math.sqrt((x2-x1)**2 + (y2-y1)**2)),3) for e in G.edges(): G[e[0]][e[1]] = weights[e] #Assigning weights to G.edges() 

Dies ist, was mein G.edges() aussieht: (startnode ID, endnode ID, Gewicht)

 [(0, 1, 1.0), (0, 10, 1.0), (1, 11, 1.0), (1, 2, 1.0),... ] #Trivial case: all weights are unitary 

Wie kann ich eine Inzidenzmatrix erstellen, die die soeben definierten Gewichte berücksichtigt? Ich möchte nx.incidence_matrix(G, nodelist=None, edgelist=None, oriented=False, weight=None) , aber was ist der richtige Wert für das weight in diesem Fall?

Die Docs sagen, dass weight ein String ist, der "den Kanaldatenschlüssel darstellt, der verwendet wird, um jeden Wert in der Matrix bereitzustellen", aber was bedeutet es speziell? Ich habe auch keine relevanten Beispiele gefunden.

Irgendwelche Ideen?

One Solution collect form web for “NetworkX: Wie kann man eine Inzidenzmatrix eines gewichteten Graphen erstellen?”

Hier ist ein einfaches Beispiel, wie man richtig kante Attribute und wie man eine gewichtete Inzidenzmatrix zu generieren.

 import networkx as nx from math import sqrt G = nx.grid_2d_graph(3,3) for s, t in G.edges(): x1, y1 = s x2, y2 = t G[s][t]['weight']=sqrt((x2-x1)**2 + (y2-y1)**2)*42 print(nx.incidence_matrix(G,weight='weight').todense()) 

AUSGABE

 [[ 42. 42. 42. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [ 0. 0. 0. 42. 42. 42. 0. 0. 0. 0. 0. 0.] [ 42. 0. 0. 0. 0. 0. 42. 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0. 0. 0. 42. 42. 42. 0. 0.] [ 0. 42. 0. 42. 0. 0. 0. 0. 42. 0. 42. 0.] [ 0. 0. 0. 0. 0. 0. 0. 42. 0. 0. 0. 42.] [ 0. 0. 0. 0. 0. 42. 0. 0. 0. 42. 0. 0.] [ 0. 0. 0. 0. 0. 0. 42. 0. 0. 0. 42. 42.] [ 0. 0. 42. 0. 42. 0. 0. 0. 0. 0. 0. 0.]] 

Wenn Sie eine bestimmte Anordnung der Knoten und Kanten in der Matrix wünschen, verwenden Sie die nodelist = und edgelist = optionale Parameter zu networkx.indicence_matrix ().

  • Python - Pandas - Append Series in Blank DataFrame
  • Vergleichen / Extrahieren von Daten aus Matrizen mit Python (2.6.1)
  • Numpy Matrix Macht / Exponent mit Modulo?
  • Erstellen einer Matrix aus Pandas dataframe, um Verbundenheit anzuzeigen
  • Wie mache ich Matrizen in Python?
  • Komma trennte Matrix aus txt-Dateien - Fortsetzung
  • Wie kann ich eine Spalte aus einer spärlichen Matrix effizient entfernen?
  • Holen Sie sich alle Diagonalen in einer Matrix / Liste der Listen in Python
  • So definieren Sie zweidimensionale Array in Python
  • Python - Liste der gleichen Spalten / Zeilen aus Matrix
  • Erhalten Sie Diagonale ohne numpy in Python
  • Python ist die beste Programmiersprache der Welt.