一、算法介绍
import numpy as np
#输入初始矩阵[[55,24,10],[65,38,22],[75,40,18],[100,50,20]]
A=np.array(eval(input('请输入初始矩阵=')))
#求出每一列的均值以供后续的数据预处理
Mean=np.mean(A,axis=0)
A_norm=A/Mean#预处理后的矩阵
#母序列
Y=A_norm[:,0]
#子序列
X=A_norm[:,1:]
#计算|Y-xi|矩阵
absY_xi=np.abs(X-np.tile(Y.reshape(-1,1),(1,X.shape[1])))
#计算两级最小差a和最大差b
a=np.min(absY_xi)
b=np.max(absY_xi)
#分辨系数取0.5(实际按需取)
rho=0.5
#计算子序列中各个指标与母序列的关联序列
gamma=(a+rho*b)/(absY_xi+rho*b)
weight=np.mean(gamma,axis=0)/np.sum(np.mean(gamma,axis=0))
score=np.sum(X*np.tile(weight,(X.shape[0],1)),axis=1)
stand_s=score/np.sum(score)#归一化后的得分
sorted_s=np.sort(stand_s)[::-1]#进行降序排序
index=np.argsort(stand_s)[::-1]#排序后的索引