zoukankan      html  css  js  c++  java
  • 【python】常用函数

    使用list生成dict(可指定单条长度和数据类型,splen为4即为list中每4行组成dict中一条)

    def list2dict(srclist,splen,datatype):# datatype: 0-str 1-int 2-float
        dstdict={}
        for i in range(0,int(len(srclist)/splen)):
            dstdict[srclist[splen*i]]=[]
            for j in range(1,splen):
                if datatype==0:
                    dstdict[srclist[splen*i]].append(srclist[splen*i+j])
                elif datatype==1:
                    dstdict[srclist[splen*i]].append(int(srclist[splen*i+j]))
                elif datatype==2:
                    dstdict[srclist[splen*i]].append(float(srclist[splen*i+j]))
                else:
                    print 'please choose the datatype'
                    return False
        return dstdict

    计算两个list的距离(注意不能用numpy的linalg.norm,因为用numpy的linalg.norm的话如果两个list相等就会报错(因为求了0向量的范数))

    def cal_list_dist(srclist1,srclist2):
        if len(srclist1)!=len(srclist2):
            print 'error in cal_list_dict, len not equal!'
            return False
        listerror=0
        for i in range(0,len(srclist1)):
             listerror+=pow(srclist1[i]-srclist2[i],2)
        return pow(listerror,0.5)

    比较按行存的label的误差

    例如可以比较这样的list中名称相同的训练样本的误差:

    将黄色处生成dict的间隔改为3,则可以比较这样的list

    import sys
    
    
    def list2dict(srclist,splen,datatype):# datatype: 0-str 1-int 2-float
        dstdict={}
        for i in range(0,int(len(srclist)/splen)):
            dstdict[srclist[splen*i]]=[]
            for j in range(1,splen):
                if datatype==0:
                    dstdict[srclist[splen*i]].append(srclist[splen*i+j])
                elif datatype==1:
                    dstdict[srclist[splen*i]].append(int(srclist[splen*i+j]))
                elif datatype==2:
                    dstdict[srclist[splen*i]].append(float(srclist[splen*i+j]))
                else:
                    print 'please choose the datatype'
                    return False
        return dstdict
    
    
    def cal_list_dist(srclist1,srclist2):
        if len(srclist1)!=len(srclist2):
            print 'error in cal_list_dict, len not equal!'
            return False
        listerror=0
        for i in range(0,len(srclist1)):
             listerror+=pow(srclist1[i]-srclist2[i],2)
        return pow(listerror,0.5)
    
    p_name=sys.argv[1]
    
    with open('./10_10_662_withcam0/'+p_name) as f:
        withcam0_list=f.read().splitlines()
    
    with open('./10_10_662_nocam0/'+p_name) as f:
        nocam0_list=f.read().splitlines()
    
    
    withcam0_dict=list2dict(withcam0_list,4,2)
    
    nocam0_dict=list2dict(nocam0_list,4,2)
    
    sumerror=0
    sumcount=0
    for elem in withcam0_dict:
        if elem in nocam0_dict:
            sumerror+=cal_list_dist(withcam0_dict[elem],nocam0_dict[elem])
            sumcount+=1
    print sumerror/sumcount
  • 相关阅读:
    usb mass storage device
    spice
    ubuntu14.04.03 vsftpd
    MingW编译virt-viewer
    virt viewer Usbredir USB重定向
    libvirt虚拟系统如何增加usb设备
    Jquery控件jrumble
    【推荐系统实战】:C++实现基于用户的协同过滤(UserCollaborativeFilter)
    STL_算法_查找算法(binary_search、includes)
    POJ 2479 Maximum sum
  • 原文地址:https://www.cnblogs.com/zealousness/p/10050595.html
Copyright © 2011-2022 走看看