Frage

Für ein Projekt, das ich tue, zersetzen ich eine Grafik, die ich mit NetworkX in eine Adjazenzmatrix erstellt die NetworkX adj_matrix () -Funktion. Jedoch ist eines der Probleme, die ich über gekommen sind ist, dass jedes einzelne Diagramm, dass ich zersetzen gibt mir die folgende Fehlermeldung, wenn ich versuche, die Inverse der Matrix zu finden.

str: Traceback (most recent call last):
  File "C:\eclipse\plugins\org.python.pydev.debug_1.4.7.2843\pysrc\pydevd_resolver.py", line 179, in _getPyDictionary
    attr = getattr(var, n)
  File "C:\Python26\lib\site-packages\numpy\core\defmatrix.py", line 519, in getI
    return asmatrix(func(self))
  File "C:\Python26\lib\site-packages\numpy\linalg\linalg.py", line 355, in inv
    return wrap(solve(a, identity(a.shape[0], dtype=a.dtype)))
  File "C:\Python26\lib\site-packages\numpy\linalg\linalg.py", line 254, in solve
    raise LinAlgError, 'Singular matrix'
LinAlgError: Singular matrix

Ich habe versucht, Adjazenzmatrizen aus 5 verschiedenen Graphen zu erzeugen und alle von ihnen produzierten den gleichen Fehler, wenn ich versuchte, die Umkehrung der Adjazenzmatrix zu finden. Die Frage, die ich stellen ist, ob es eine Möglichkeit von NetworkX Graphen Matrix zu gehen. Was ist meine beste Vorgehensweise von hier aus? Ich weiß, gibt es im Zusammenhang weitere Fragen Umkehrungen Matrix, aber er wird etwas durch die Tatsache, dass ich die Grafik Adjazenzmatrix benötigen.

War es hilfreich?

Lösung

Adjazenzmatrizen sind nicht immer umkehrbar . Es gibt Papiere zu diesem Thema ; Ich bin nicht sicher, ob es eine einfache Charakterisierung des entsprechenden Graphen. Ein pragmatischer Ansatz wäre die LinAlgError Ausnahme in Ihrem Code zu fangen (try ... except ...), und zu warnen, wenn die Adjazenzmatrix nicht umkehrbar ist (und halten Sie Ihre Berechnungen sonst durchführt).

Andere Tipps

Ich weiß nicht genau, wie NetworkX die Adjazenzmatrix produziert, aber es gibt absolut keinen Grund dafür inversible zu sein. Betrachten wir zum Beispiel die komplette Grafik (alle Knoten zu jedem miteinander verbunden sind), seine adacency Matrix voller Einsen ist und die Matrix hat offensichtlich 0 als Eigenwert (sobald die Anzahl der Knoten> = 2 ist natürlich. ..). Oder die grafische Darstellung mit N Knoten und ohne Kanten, seine Adjazenzmatrix 0 ...

Was möchten Sie tun? Ich hatte nie die Umkehrung der Adjazenzmatrix zu betrachten, sondern sehr oft die Inverse I - x A für einig (kleinen) Wert von x. Ihre Umkehr ist

(I - x A) ^(-1) = I + xA + x^2 A2 + ...

, die für einen Wert von x inversible ist (in der Tat, sobald | x |

fragen Sie für eine Methode Graphen zu erzeugen, deren Adjazenzmatrizen sind nicht singulär? es ist nicht die Schuld des NetworkX oder den numpy ist, dass die Grafiken, die Sie Adjazenzmatrizen erzeugt haben, die Umkehrungen nicht hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top