Question

Pour un projet que je fais, je décompose un graphique que j'ai créé à l'aide NetworkX dans une matrice de contiguïté en utilisant la fonction adj_matrix () NetworkX. Cependant, l'un des problèmes que je suis venu à travers est que chaque seul graphique que je me donne décomposons l'erreur suivante lorsque je tente de trouver l'inverse de la 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

J'ai essayé de générer des matrices de contiguïté de 5 graphiques différents et tous les a produits la même erreur quand j'ai essayé de trouver l'inverse de la matrice de contiguïté. La question que je pose est de savoir s'il y a un moyen de passer du graphe NetworkX à la matrice. Quel est mon meilleur plan d'action d'ici? Je sais qu'il ya d'autres questions relatives à la matrice Inverses mais le mien est quelque peu limitée par le fait que j'ai besoin le graphique matrice de contiguïté.

Était-ce utile?

La solution

matrices de contiguïté sont pas toujours inversible. Il y a papiers sur ce sujet; Je ne suis pas certain qu'il y ait une caractérisation simple des graphiques correspondants. Une approche pragmatique consisterait à intercepter l'exception de LinAlgError dans votre code (try ... except ...), et mettre en garde lorsque la matrice de contiguïté n'est pas inversible (et continuer d'effectuer vos calculs autrement).

Autres conseils

Je ne sais pas exactement comment NetworkX produit la matrice de contiguïté, mais il n'y a absolument aucune raison pour qu'il soit inversible. Par exemple, considérons le graphe complet (tous les noeuds sont connectés à tous les uns des autres), sa matrice adacency est pleine de ceux, et la matrice a évidemment 0 comme valeur propre (dès que le nombre de nœuds est> = 2 bien sûr. ..). Ou le graphique avec N noeuds et sans arêtes, sa matrice de contiguïté est 0 ...

Que voulez-vous faire? Je ne ai jamais eu à considérer l'inverse de la matrice de contiguïté, mais très souvent l'inverse de I - x A pour certains (petits) valeur de x. Son inverse est

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

qui est inversible pour une valeur de x (en fait, dès que | x |

demandez-vous une méthode pour générer des graphiques dont les matrices sont contiguïté non singulier? il n'y a pas de faute de NetworkX ou de numpy est que les graphiques que vous avez généré ont des matrices de contiguïté qui ne sont pas inverses.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top