首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用(Python AHP) numpy.linalg导出最大特征值(似乎不收敛?)

如何使用(Python AHP) numpy.linalg导出最大特征值(似乎不收敛?)
EN

Stack Overflow用户
提问于 2016-11-30 19:09:30
回答 1查看 770关注 0票数 1

我是一个地理空间专家,不是数学家或程序员。所以请不要因为我不正确的措辞或糟糕的编码而责备我。我只是在寻求帮助。

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

代码语言:javascript
复制
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计算器得出的排名(权重)不匹配。也就是说,它们似乎来自第一次迭代,而不是通过多次迭代在收敛时获得的值。

例如,从下面的成对互反矩阵:

代码语言:javascript
复制
[[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]]

我得到的排名如下:

代码语言:javascript
复制
[ 0.035  0.074  0.15   0.038  0.08   0.623]

当我期望收到以下内容时:

代码语言:javascript
复制
[ 0.056  0.074  0.106  0.057  0.076  0.631]

有谁有什么想法吗?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-11-30 23:58:00

我与Mathematica进行了交叉验证,它给出了与从Python代码中获得的最大特征值相同的归一化右特征向量。因此,我怀疑问题出在您的期望上。它是从哪里来的?也许,如果你与其他软件相比,它使用了一些额外的调整,而不是基本的AHP。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40886825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档