Форум сайта python.su
День добрый.
Вопрос по оптимизации кода, чтоб сделать его быстрее.
Есть 2 списка одинаковой длинны:
y=[0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1]
x = [0, 0, 0.7, 0.5, 0.6, 0.7, 0, 0, 0, 0.8, 0.75, 0.6]
def cscoree(y_true, y_probs): win=0 loss=0 scoreee=0 i=0 while i < len(y_true): if y_probs[i] >= uver: if y_true[i] > 0: win+=1 else: loss+=1 i+=1 scoreee=win-loss return scoreee
new_list = list(map(lambda x,y: (y if (x >= 0.6) else 2), x, y)) scoreee = (new_list.count(1) - new_list.count(0))
Отредактировано itsLek (Апрель 28, 2017 13:02:24)
Офлайн
score = sum(y >= 0.6 and x or 0 for x, y in zip(y_true, y_probs))
Офлайн
PooHСпасибо за отклик, но так мы подсчитаем только winscore = sum(y >= 0.6 and x or 0 for x, y in zip(y_true, y_probs))
Отредактировано itsLek (Апрель 28, 2017 13:03:09)
Офлайн
win = 0 loss = 0 for x,y in zip(x,y): if x >= 0.6: if y: win += 1 else: loss += 1 print win,loss,win - loss
Отредактировано vic57 (Апрель 28, 2017 14:34:56)
Офлайн
vic57Спасибо, это решение действительно быстрее.win = 0 loss = 0 for x,y in zip(x,y): if x >= 0.6: if y: win += 1 else: loss += 1 print win,loss,win - loss
Отредактировано itsLek (Апрель 28, 2017 15:51:58)
Офлайн
itsLekзамерьте, но имхо генератор - обертка для цикла
А через генератор списков еще быстрее не будет?
Офлайн
sum(y >= 0.6 and (x or -1) or 0 for x, y in zip(y_true, y_probs))
Офлайн
itsLekстранно вы время меряете
Было Wall time: 766 ms
Стало Wall time: 422 ms
from time import time y=[0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1] x = [0, 0, 0.7, 0.5, 0.6, 0.7, 0, 0, 0, 0.8, 0.75, 0.6] t1 = time() score = 0 for x,y in zip(x,y): if x >= 0.6: if y: score += 1 else: score -= 1 t = time() - t1 print "time: %f" % t print 'score:',score
Офлайн
y=[0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1] x = [0, 0, 0.7, 0.5, 0.6, 0.7, 0, 0, 0, 0.8, 0.75, 0.6] win,loss = sum([1 for a,b in zip(x,y) if a>=0.6 and b]) , sum([1 for a,b in zip(x,y) if a>=0.6 and not b]) print win,loss,win - loss
Отредактировано Vladimirv (Апрель 28, 2017 19:06:49)
Офлайн
>>> x = [0, 0, 0.7, 0.5, 0.6, 0.7, 0, 0, 0, 0.8, 0.75, 0.6] >>> y = [0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1] >>> >>> score = sum(i[1] and 1 or -1 for i in ... (i for i in zip(x, y) if i[0] >= 0.6)) >>> score 4 >>>
Офлайн