2016-07-14 4 views
0

Я пытаюсь использовать этот код, который вычисляет долю перекрытия на определенной глубине, для использования на разных глубинах.Использование цикла for для автоматизации функции

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)) 

Однако, когда я пытаюсь запустить этот код, который я получаю сообщение об ошибке:

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

Это означает, что переменная глубина фактически список переменной а (который [0,01, 0,02 ..и т.д]).

Как исправить это, чтобы функция принимала только один аргумент параметра «глубина» за раз, а не то, что похоже на весь список?

Благодаря

+2

Я знаю почти ничего о numpy, но что, если вы сделали 'a = numpy.arange (.01,1.01, .01)'? Скобки кажутся излишними. – Kevin

+0

Спасибо, что поймали эту – Labrat

ответ

2

Как Кевин сказал в комментариях, ваша проблема, вы создаете список, который имеет другой список внутри него в коде a = [numpy.arange(.01,1.01,.01)]. Просто удалите дополнительные скобки, и он будет работать.

Смежные вопросы