我是一个地理空间专家,不是数学家或程序员。所以请不要因为我不正确的措辞或糟糕的编码而责备我。我只是在寻求帮助。
我使用以下代码从成对比较矩阵中获得排名:
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]有谁有什么想法吗?提前谢谢。
发布于 2016-11-30 23:58:00
我与Mathematica进行了交叉验证,它给出了与从Python代码中获得的最大特征值相同的归一化右特征向量。因此,我怀疑问题出在您的期望上。它是从哪里来的?也许,如果你与其他软件相比,它使用了一些额外的调整,而不是基本的AHP。
编码注释:不需要转换为列表进行规范化。您可以改用weights = weights/np.sum(weights)。
https://stackoverflow.com/questions/40886825
复制相似问题