如何使用(Python AHP)努比·利纳格求出最大特征值(似乎不收敛?)

2024-06-16 17:13:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我不是一个专业的数学家,也不是一个专业的程序员。所以请不要责怪我的措辞不正确或编码不好。我只是在寻求帮助。在

我使用以下代码从成对比较矩阵中得出排名:

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计算器的排名不匹配。也就是说,它们似乎来自第一次迭代,而不是通过多次迭代在收敛时得到的值。在

例如,从以下两两互反矩阵:

^{pr2}$

我得到以下排名:

[ 0.035  0.074  0.15   0.038  0.08   0.623]

当我希望收到:

[ 0.056  0.074  0.106  0.057  0.076  0.631]

有人有什么想法吗?提前谢谢。在


Tags: 代码numpy编码专业矩阵array程序员vector
1条回答
网友
1楼 · 发布于 2024-06-16 17:13:11

我与Mathematica进行了交叉检查,它为最大特征值提供了与从Python代码中获得的相同的标准化右特征向量。因此,我怀疑问题在于你的期望。它是从哪里来的?也许如果你在和其他软件进行比较,它会使用一些额外的调整,而不是基本的层次分析法。在

编码注释:不需要转换为列表进行规范化。您可以改为使用weights = weights/np.sum(weights)。在

相关问题 更多 >