python计算Friedman排名代码

python计算Friedman排名代码

首先先说输入数据,为了迅速处理,采用csv格式的表格,读者可以先理解这里提供的示例和代码,再自行调整
在这里插入图片描述
下面是代码,代码会生成一个排名文件Rank.csv。其除了会生成每个方法再每个案例下排名,还会得到一行平均排名,故最后生成的形状为19*33

# -*- coding: utf-8 -*-
"""
Created on Tue Aug  9 10:15:36 2022

@author: Administrator
"""

import numpy as np

da=np.loadtxt("values.csv",delimiter=",",dtype="str")#np.float32
n=11 #n是11个方法进行排名
#[bpd,apd,wpd]分别是最优,平均和最差指标值
bpd=da[:,:n]
apd=da[:,n:n+n]
wpd=da[:,n+n:]
all_pd=[bpd,apd,wpd]
all_pd1=[]
#如果不需要最优,平均和最差指标值分别计算,可以去掉这个for循环直接用da
for pd in all_pd:
    pd=pd.tolist()
    pd1=[]
    for x in pd:
        x1=[float(i) for i in x]
        rank1=1
        used=0
        minn=1000000000000
        same_l=[]
        x2=[0 for _ in range(n)]
        while used<n:
            # print(used)
            for j in range(0,n):
                if x2[j]==0:
                    item=x1[j]
                    if item<minn:
                        minn=item
                        same_l=[]
                        same_l.append(j)
                    elif item==minn:
                        same_l.append(j)
            if len(same_l)==1:
                avg_pd=rank1
            else:
                avg_pd=rank1+(len(same_l)-1)/2
            for j in same_l:
                x2[j]=avg_pd
            rank1=len(same_l)+rank1
            used=used+len(same_l)
            same_l=[]
            minn=1000000000000

        pd1.append(np.array(x2))
    pd=pd1
    all_pd1.append(np.array(pd))

all_pd1=np.array(all_pd1)
tmp=np.hstack((all_pd1[1],all_pd1[2]))
all_pd1=np.hstack((all_pd1[0],tmp))
tmp=np.mean(all_pd1,axis=0)
tmp=tmp.reshape((1,n*3))
all_pd1=np.vstack((all_pd1,tmp))
np.savetxt("ranks.csv",all_pd1,delimiter=",",fmt="%.3f")
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小怪兽会微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值