我不是一个专业的数学家,也不是一个专业的程序员。所以请不要责怪我的措辞不正确或编码不好。我只是在寻求帮助。在
我使用以下代码从成对比较矩阵中得出排名:
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]
有人有什么想法吗?提前谢谢。在
我与Mathematica进行了交叉检查,它为最大特征值提供了与从Python代码中获得的相同的标准化右特征向量。因此,我怀疑问题在于你的期望。它是从哪里来的?也许如果你在和其他软件进行比较,它会使用一些额外的调整,而不是基本的层次分析法。在
编码注释:不需要转换为列表进行规范化。您可以改为使用
weights = weights/np.sum(weights)
。在相关问题 更多 >
编程相关推荐