Matrici e matrici inverse in Python
-
12-09-2019 - |
Domanda
Per un progetto che sto facendo, ho decompongono un grafico che ho creato utilizzando NetworkX in una matrice di adiacenza utilizzando la funzione di () adj_matrix NetworkX. Tuttavia, uno dei problemi che ho incontrato è che ogni singolo grafico che si decompongono mi dà il seguente errore quando cerco di trovare l'inverso della matrice.
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
Ho provato generare matrici di adiacenza da 5 diversi grafici e tutti prodotti lo stesso errore quando ho cercato di trovare l'inversa della matrice di adiacenza. La domanda che mi pongo è se non v'è alcun modo per andare dal grafico NetworkX alla matrice. Qual è la mia linea di condotta migliore da qui? Mi rendo conto che ci sono altre domande relative alla matrice inversi, ma il mio è piuttosto limitata dal fatto che ho bisogno la matrice grafo di adiacenza.
Soluzione
sempre invertibile . Ci sono carte in materia; Non sono sicuro se c'è qualche semplice caratterizzazione dei grafici corrispondenti. Un approccio pragmatico sarebbe quello di intercettare l'eccezione LinAlgError nel codice (try ... except ...), e avvertire quando la matrice di adiacenza non è invertibile (e mantenere eseguendo i calcoli in altro modo).
Altri suggerimenti
Non so esattamente come NetworkX produce la matrice di adiacenza, ma non c'è assolutamente alcuna ragione per essere inversible. Ad esempio, si consideri il grafo completo (tutti i nodi sono collegati a ogni vicenda), la sua matrice adacency è completo di pile, e la matrice ha ovviamente 0 come autovalore (non appena il numero di nodi è> = 2 naturalmente. ..). O il grafico con n nodi e privo di spigoli, la sua matrice di adiacenza è 0 ...
Che cosa vuoi fare? Non ho mai dovuto prendere in considerazione l'inverso della matrice di adiacenza, ma molto spesso l'inverso di I - x A
per un certo valore (piccola) di x. Il suo inverso è
(I - x A) ^(-1) = I + xA + x^2 A2 + ...
che è inversible per un certo valore di x (in realtà, non appena | x |
stai chiedendo per un metodo per generare grafici le cui matrici di adiacenza sono non singolare? non è colpa di NetworkX del o NumPy è che i grafici si generati hanno matrici di adiacenza che non hanno inverse.