2016-07-14 7 views
0

Ich versuche, diesen Code zu verwenden, der den Bruchteil der Überlappung bei einer bestimmten Tiefe berechnet, um in verschiedenen Tiefen zu verwenden.Verwenden einer For-Schleife, um eine Funktion zu automatisieren

def score(list1, list2, depth): 
    len_list = len(list1) 

    frac = numpy.ceil(depth * len_list) 

    frac = int(frac) 
    s = slice(0,frac) 

    list1 = list1[s] 
    list2 = list2[s] 

    return len(set(list1)&set(list2))/float(len(set(list1) | set(list2))) 


if __name__ == "__main__": 

    list1 = [2,4,6,8,10] 
    list2 = [1,2,3,4,5] 

    a = [numpy.arange(.01,1.01,.01)] 
    for i in a: 
     print(score(list1, list2, i)) 

Allerdings, wenn ich versuchen, diesen Code auszuführen ich eine Störung erhalte:

frac = int(frac) 
TypeError: only length-1 arrays can be converted to Python scalars 

was bedeutet, dass die variable Tiefe ist eigentlich eine Liste der Variablen ein (die [0,01, 0,02 ..etc]).

Wie würde ich das korrigieren, so dass die Funktion nur ein Argument des Parameters 'Tiefe' zu einem Zeitpunkt anstelle von dem, was wie die gesamte Liste scheint, nimmt?

Dank

+2

Ich weiß fast nichts über numpy, aber was ist, wenn Sie 'a = numpy.arange (.01,1.01, .01)' '? Die Klammern scheinen überflüssig. – Kevin

+0

Danke für den Fang – Labrat

Antwort

2

Wie Kevin sagte in dem Kommentar, Ihr Problem ist, dass Sie eine Liste erstellen, die a = [numpy.arange(.01,1.01,.01)] in Ihrem Code in der es eine andere Liste. Entfernen Sie einfach die zusätzlichen Klammern und es funktioniert.

Verwandte Themen