Python2.7中的算法比Python3慢

2024-09-27 02:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我实现了一个算法,从书目数据中返回一个具有相似记录的列表。你知道吗

def Find_top(rank,structure, cp):
    global contadorGrupos
    global contadorValor
    datos=[]
    for clave in rank:
        aux=[]
        vectorName=[]
        if clave["Analizado"]==0:
            for x in structure:
                if clave["Name"]!=x["Name"]:
                    if x["Analizado"]==0:
                        jac=jaccard_similarity(clave["Name"],x["Name"])
                        if jac > 0.4:
                            jar=jellyfish.jaro_winkler(unicode(clave["Name"], 'utf-8'),unicode(x["Name"], 'utf-8'))
                            valor=(jac+jar)/2
                            if valor > 0.5:
                                if cp=="Authors":
                                    if valor> 0.8 and Comparador(clave["Name"], x["Name"])==1:
                                        if Verificar_Key(clave["Afiliation"], x["Afiliation"])>0.7:
                                            aux.append(x)
                                            vectorName.append(x["Name"])
                                            x["Analizado"]=1
                                else:
                                    if cp == "Afiliation":
                                        if valor >= 0.983 :
                                            aux.append(x)
                                            vectorName.append(x["Name"])
                                            x["Analizado"]=1
                                    else:
                                        if valor >= 0.93:
                                            aux.append(x)
                                            vectorName.append(x["Name"])
                                            x["Analizado"]=1
        clave["Analizado"]=1
        aux = aux+BuscarParecidos(vectorName,structure, cp)
        BuscarT(vectorName, rank)
        if len(aux)!=0:
            contadorGrupos = contadorGrupos + 1
            aux.append(clave)
            datos.append(aux)
        contadorValor = contadorValor + 1
    return datos

BuscarParecidos所在位置:

def BuscarParecidos(vector, lista , cp):
    vectorAuxiliar=[]
    nombres=[]
    for ax in vector:
        for i in lista:
            if i["Analizado"]==0:
                if not i["Name"] in vector:
                    vx=jaccard_similarity(ax,i["Name"])
                    vy=jellyfish.jaro_winkler(unicode(ax, 'utf-8'),unicode(i["Name"], 'utf-8'))
                    vt=(vx+vy)/2
                    if cp=="Authors":
                        if vt > 0.8 and Comparador(ax,i["Name"])==1:
                            i["Analizado"]=1
                            vectorAuxiliar.append(i)
                            nombres.append(i["Name"])
                    else:
                        if cp == "Afiliation":
                            if vt >= 0.983:
                                i["Analizado"]=1
                                vectorAuxiliar.append(i)
                                nombres.append(i["Name"])
                        else:
                            if vt >= 0.93:
                                i["Analizado"]=1
                                vectorAuxiliar.append(i)
                                nombres.append(i["Name"])
    vector = vector + nombres
    return vectorAuxiliar

jaccard_similarity是我自己的算法,jaro_winkler由水母库实现。你知道吗

问题是,当我用python3.4运行算法时,它在40秒内完美运行,大约有3310条记录。但是当我用python2.7运行算法时,需要4分零几秒才能完成。我不明白为什么会这样。你知道吗


Tags: namein算法forifcpvalorvector

热门问题