2012-06-07 19 views
5

Python'da bir Laplacian (L) oyununu nasıl bulabilirim? Özdeğerleri, özvektörler = linalg.eig (L)Python'da Fiedler Vektör Bilgisinin Hesaplanması

Ben piton siparişte özdeğerleri döndürmez varsayalım:

kullanıyorum özdeğer ve özvektör alabilirsiniz.

En büyük ikinci özdeğeri alıp karşılık gelen özvektörle eşleştir (indeksle eşleşme)?

Özdeğerleri sipariş ederken, negatif değerlerle nasıl başa çıkabilirim? Sipariş mutlak büyüklükte mi? Yardımlarınız

+0

Hızlı çözüm, 'evals, evec = np.linalg.eigh (L) ind = np.argsort (değerlendirmeler) evals = değerlendirmeler [ind] evec = evec [:, ind]' –

+0

fiedler = evec [:, 1 ] bağlantı = evals [1] – Icarus

cevap

3

Eh için

sayesinde ben dahil matematik bilmem, ama elimden geleni yapacağım.

documentation, linalg.eig'u denetlerseniz, özvektörler karşılık gelen özdeğerleri ile aynı sırada döndürür. İlk eleman tarafından varsayılan Python sıralar dizilerini tarafından

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] 

, sonra ikinci ve benzeri, ve sayılar beklediğiniz gibi olsun sıralanır (-2 < -:

bir şey gibi yapabilir 1 vb. Bu, özdeğerinizin karmaşık olmadığını varsayar. Ayrıca, yinelenen özdeğerler olabileceğini ve Fiedler vektörünün ikinci en küçük benzersiz özdeğere sahip özvektör olduğunu varsaydım.

+0

hızlı çözüm, 'evals, evec = np.linalg.eigh (L) ' ' ind = np.argsort (evals)' 'evals = evals [birey]' ' evec = evec [:, ind] ' –

+0

@HirakSarkar Ben numpy ile aşina değilim, ne' 'evec [:, ind]' yapmak? Bence bu her durumda doğru olamaz, fiedler vektörü ikinci en küçük * benzersiz * özdeğer ile ilişkili özdeğerlerdir. Eğer bir şekilde kopyaları geçmiyorsanız, bu işe yaramaz. – Julian

+0

Sadece vektörleri eigen değerlerine göre sıralıyorum, bu yüzden burada fiedler vektörünü bulamadım. Ancak, vektörleri buna göre sıraladığınızda bu kolay bir işlemdir. –

İlgili konular