문제

내가하고있는 프로젝트의 경우 NetworkX adj_matrix () 함수를 사용하여 NetworkX를 사용하여 만든 그래프를 인접한 행렬로 분해합니다. 그러나 내가 겪은 문제 중 하나는 분해하는 모든 단일 그래프가 행렬의 역수를 찾으려고 할 때 다음과 같은 오류를 제공한다는 것입니다.

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

나는 5 개의 다른 그래프에서 인접 행렬을 생성하려고 시도했고 인접한 매트릭스의 역수를 찾으려고 할 때 동일한 오류를 생성했습니다. 내가 포기하는 질문은 NetworkX 그래프에서 매트릭스로 이동하는 방법이 있는지 여부입니다. 여기에서 나의 가장 좋은 행동 과정은 무엇입니까? 나는 매트릭스 수치와 관련된 다른 질문이 있다는 것을 알고 있지만, 내 그래프 인접 행렬이 필요하다는 사실에 의해 다소 제한적입니다.

도움이 되었습니까?

해결책

인접 행렬입니다 항상 뒤집을 수는 없습니다. 거기 있습니다 서류 이 주제에 대해; 해당 그래프의 간단한 특성이 있는지 확실하지 않습니다. 실용적인 접근 방식은 코드에서 Linalgerror 예외를 포착하는 것입니다 (시도… 제외). 인접 행렬이 뒤집을 수없는 경우 경고합니다 (그렇지 않으면 계산을 계속 수행합니다).

다른 팁

NetworkX가 인접성 행렬을 어떻게 생성하는지 정확히 알지 못하지만 역할 수없는 이유는 전혀 없습니다. 예를 들어, 완전한 그래프 (모든 노드가 서로 연결되어 있음)를 고려하고, 적용성 행렬은 가득 차 있으며, 매트릭스는 분명히 고유 값으로 0입니다 (노드 횟수가> = 2가 되 자마자 0이됩니다. ..). 또는 N 노드와 가장자리가없는 그래프, 인접 행렬 매트릭스는 0입니다.

뭐하고 싶어 ? 나는 인접 행렬의 역수를 고려할 필요가 없었지만 종종 I - x A x의 일부 (작은) 값의 경우. 그것의 역수입니다

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

X의 일부 값에 대해 역할 수없는 (실제로 | x | <max (| 1/y | y for y for a)의 a) 그래프, 그러나 약간의 부패를 넣으므로 합산 가능합니다 (PageRank 누구?)

인접 행렬이 비 싱글 인 그래프를 생성하는 방법을 요구하고 있습니까? 당신이 생성 한 그래프에 반전이없는 인접 행렬을 가지고 있다는 것은 NetworkX 또는 Numpy 's의 잘못이 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top