2012-06-07 14 views
5

Come trovare il vettore di fielder di un Laplacian (L) in Python?Calcolo del vettore Fiedler in Python

posso ottenere gli autovalori e autovettori utilizzando: autovalori, autovettori = linalg.eig (L)

assumo che pitone non restituisce autovalori in un ordine.

Prendo il 2 ° autovalore più grande e quindi lo abbino all'autovettore corrispondente (corrispondente all'indice)?

Quando si ordinano gli autovalori, come si gestiscono i valori negativi? L'ordine è di magnitudine assoluta?

Grazie per il vostro aiuto

+0

Soluzione rapida, 'evals, evec = np.linalg.eigh (L) ind = np.argsort (evals) evals = evals [ind] evec = evec [:, ind]' –

+0

fiedler = evec [:, 1 ] connettività = evals [1] – Icarus

risposta

3

Be ', io non conoscono la matematica coinvolta, ma io farò del mio meglio.

Se si controlla il documentation, restituisce infatti gli autovettori nello stesso ordine dei corrispondenti autovalori.

potrei fare qualcosa di simile:

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] 

di default Python ordinamenti tuple dal primo elemento, poi il secondo e così via, ed i numeri sono ordinate solo il modo che ci si aspetta (-2 < - 1 ecc.). Ciò presuppone che i tuoi autovalori non siano complessi, naturalmente.

Inoltre, ho assunto che potrebbero esserci autovalori duplicati e che il vettore Fiedler è l'autovettore associato al secondo autovalore unico più piccolo.

+0

soluzione rapida, 'evals, evec = np.linalg.eigh (L)' ' ind = np.argsort (evals)' ' evals = evals [ind]' ' evec = evec [:, ind] ' –

+0

@HirakSarkar Non ho molta familiarità con numpy, cosa sta facendo 'evec [:, ind]? Penso che questo non possa essere giusto in ogni caso, il vettore fiedler è l'autovalore associato al secondo più piccolo * autovalore * unico. A meno che tu non stia saltando i duplicati, questo non funzionerà. – Julian

+0

Ho appena ordinato i vettori rispetto ai valori di autovalori, quindi non ho trovato qui il vettore di fiedler. Ma questo è facile una volta ordinati i vettori di conseguenza. –