使用 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
来源: http://www.bubuko.com/infodetail-2868886.html