2012-06-07 2 views
5

파이썬에서 Laplacian (L)의 야수 벡터를 찾는 방법은 무엇입니까? 고유 값, 고유 벡터 = linalg.eig (L)파이썬에서 Fiedler 벡터 계산하기

내가 파이썬은 순서대로 고유 값을 반환하지 않는 가정을 :

내가 사용하는 고유 값과 고유 벡터를 얻을 수 있습니다.

두 번째로 큰 고유 값을 취한 다음 해당 고유 벡터 (색인과 일치)에 일치 시키나요?

고유 값을 주문할 때 음수 값을 어떻게 처리합니까? 순서는 절대적인 크기입니까? 당신의 도움이

+0

빠른 해결책,'evals, evec = np.linalg.eigh (L) ind = np.argsort (evals) evals = evals [ind] evec = evec [:, ind]' –

+0

fiedler = evec [:, 1 ] 연결 evals = [1] – Icarus

답변

3

음에 대한

덕분에, 나는 관련된 수학에 대해 잘 모르지만, 난 내 최선을 다하겠습니다.

documentation을 확인하면 사실상은 해당 고유 값과 동일한 순서로 고유 벡터를 반환합니다. 첫 번째 요소에 의해 기본 파이썬 종류의 튜플에 의해

w, v = linalg.eig(L) 
seen = {} 
unique_eigenvalues = [] 
for (x, y) in zip(w, v): 
    if x in seen: 
     continue 
    seen[x] = 1 
    unique_eigenvalues.append((x, y)) 
fiedler = sorted(unique_eigenvalues)[1][1] 

, 다음 두 번째 등등, 숫자가 당신이 기대 다만 방법을 정렬 (-2 < - :

나는 무언가 같이 할 수 1 등). 이것은 당신의 고유치가 물론 복잡하지 않다고 가정합니다.

또한 중복 된 고유 값이있을 수 있고 Fiedler 벡터가 두 번째로 작은 고유 고유 값과 관련된 고유 벡터라고 가정했습니다.

+0

빠른 용액 'evals, evec np.linalg.eigh = (L)'' IND = np.argsort (evals)'' evals 용의 evals = [IND]'' evec = evec [:, ind]' –

+0

@HirakSarkar 나는 numpy에 익숙하지 않은데,'evec [:, ind]'하고 뭐하는거야? 나는 이것이 어쨌든 맞을 수 없다고 생각합니다. fiedler 벡터는 두번째로 작은 고유 * 고유 값과 연관된 고유 값입니다. 중복 된 내용을 건너 뛰지 않는 한이 방법은 작동하지 않습니다. – Julian

+0

방금 ​​고유 값과 관련하여 벡터를 정렬 했으므로 여기서 fiedler 벡터를 찾지 못했습니다. 그러나 일단 벡터를 정렬하면 쉽게 구할 수 있습니다. –