赞
踩
- import torch
-
- # 输入判断矩阵
- print("输入判断矩阵")
- A_str = input("A=").split()
- # 使用input函数获取用户输入的字符串,并通过split方法将其分割成行列表。
- A = torch.tensor([[float(x) for x in row.split(',')] for row in A_str], dtype=torch.float32).cuda()
- # 使用列表推导式将每一行字符串分割成数字,并转换为浮点数,然后创建一个PyTorch张量(Tensor)。
- # 将张量的数据类型指定为torch.float32。
- # 使用.cuda()方法将张量移动到GPU上,以便进行GPU加速计算
- n = A.size(0) # 获取矩阵的行数,即n
- # 获取矩阵A的行数,并将其存储在变量n中。
- # 方法一 算术平均法求权重
- Sum_A = torch.sum(A, dim=0)
- Stand_A = A / Sum_A
- # 计算A的每一列的和,得到Sum_A。
- # 将矩阵A的每个元素除以其所在列的和,得到标准化后的矩阵Stand_A。
- print("平均值为")
- w1 = torch.sum(Stand_A, dim=1) / n
- print(w1)
- # 打印信息提示。
- # 计算标准化矩阵Stand_A的每一行的平均值,得到权重向量w1。
- # 打印权重向量w1
-
- # 方法二, 特征值法求权重
- eigenvalues, eigenvectors = torch.eig(A, eigenvectors=True)
- # 使用torch.eig函数计算矩阵A的特征值和特征向量。
- Max_eig = torch.max(eigenvalues[:, 0])
- index = torch.argmax(eigenvalues[:, 0])
- # 从特征值中找到最大的实部特征值,并存储在Max_eig中。
- # 找到最大特征值的索引,并存储在index中。
- print("特征值求权重的结果为:")
- w2 = eigenvectors[:, index] / torch.sum(eigenvectors[:, index])
- print(w2)
- # 打印信息提示。
- # 将对应的特征向量归一化,得到权重向量w2。
- # 打印权重向量w2。
- print("两种方法的平均值为:")
- print((w1 + w2) / 2)
- # 打印信息提示。
- # 计算两种方法得到的权重的平均值,并打印。
-
- # 计算一致性比例CR
- CI = (Max_eig - n) / (n - 1)
- # 计算一致性指标(CI),它是最大特征值与矩阵大小之差除以矩阵大小减1。
- RI = torch.tensor([0.0001, 0.52, 0.89, 1.12, 1.36, 1.41, 1.46, 1.49, 1.52, 1.54, 1.56, 1.58, 1.59],
- dtype=torch.float32).cuda()
- # 创建一个包含随机一致性指标(RI)值的张量,并将其移动到GPU上
- CR = CI / RI[n - 1]
- # 计算一致性比例(CR),它是CI除以对应的RI值
-
- print("最大特征值为:")
- print(Max_eig)
- print("一致性指标为CI=")
- print(CI)
- print("一致性比例为CR=")
- print(CR)
- # 打印最大特征值、一致性指标CI和一致性比例CR。
- if CR < 0.10:
- print("CR<0.10,该判断矩阵的一致性可以接受")
- else:
- print("注意,CR >=0.10,该判断举证需要进行修改!")
- # 根据CR的值判断矩阵的一致性是否可以接受,并打印相应的信息。如果CR小于0.10,则认为矩阵的一致性是可以接受的;否则,需要进行修改。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。