2016-11-30 27 views
1

我是一名地理空間專業人員,而不是數學家或程序員。所以請不要因爲不正確的措辭或編碼不當而對我進行懲罰。我只是在尋求幫助。如何使用(Python AHP)numpy.linalg來派生最大特徵值(似乎沒有收斂?)

我使用下面的代碼從一個判斷矩陣得出排名:

A = numpy.array(matrix) 

"Define vector of weights based on eigenvector and eigenvalues" 
eigenvalues, eigenvector=numpy.linalg.eig(A) 
maxindex=numpy.argmax(eigenvalues) 
eigenvalues=numpy.float32(eigenvalues) #float32 
eigenvector=numpy.float32(eigenvector) #float32 
weights=eigenvector[:, maxindex] 

weights.tolist() #convert array(numpy) to vector 
weights=[ w/sum(weights) for w in weights ] 

print "Layer Weights: " + str(numpy.around(weights,3)) 

的問題是,派生的排名(權重)不匹配來自其他第三方AHP計算器。也就是說,它們似乎來自第一次迭代,而不是通過多次迭代收斂而得到的值。

例如,可以從以下兩兩相互矩陣:

[[1.0, 0.333, 0.2, 1.0, 0.333, 0.111], 
[3.0, 1.0, 0.25, 3.0, 1.0, 0.111], 
[5.0, 4.0, 1.0, 3.0, 2.0, 0.111], 
[1.0, 0.333, 0.333, 1.0, 0.333, 0.111], 
[3.0, 1.0, 0.5, 3.0, 1.0, 0.111], 
[9.0, 9.0, 9.0, 9.0, 9.0, 1.0]] 

我收到以下排名:

[ 0.035 0.074 0.15 0.038 0.08 0.623] 

當我希望得到:

[ 0.056 0.074 0.106 0.057 0.076 0.631] 

有誰有什麼想法?提前致謝。

回答

0

我與Mathematica進行了交叉檢查,它給出了與從Python代碼中獲得的最大特徵值相同的規範化右特徵向量。所以我懷疑問題在於你的期望。它從何而來?也許如果你與其他軟件進行比較,它會使用一些額外的調整而不是基本的AHP。

編碼註釋:無需轉換爲正常化列表。您可以改用weights = weights/np.sum(weights)

相關問題