2015-04-30 7 views
4

Я пытаюсь улучшить скорость моего кода на Python. Для большого набора данных требуется много времени. Есть ли лучший способ сделать это с более высокой скоростью?Улучшение скорости вложенного цикла

for i in range(0,len(nodes)): 
fragment = nodes[i] 
for l in range(0, length1): 
    fragment1 = Text[l:int(l)+int(k)]  
    count = [0]*gen_len 

    for j in range(0, gen_len): 
     if fragment[j] != fragment1[j]: 
      count[j] = count[j]+1    

     if j == (gen_len-1): 

      if int(sum(count)) <= int(Num_mismatches): 
       count2[i] = count2[i]+1 
       result2[i] = fragment 
       result.append(fragment) 

       if count2[i] > maxval: 
        maxval = count2[i] 
+2

Я голосующий, чтобы закрыть этот вопрос как не по теме, потому что он принадлежит кодовому обзору. – TigerhawkT3

+1

Вы можете использовать 'pypy', если у вас нет зависимостей от расширений C или' scipy'. –

+3

Является ли это python2.x? Если да, вы можете увидеть приличное ускорение, если вы перевернете вложенный «диапазон (0, ...)» на «xrange (0, ...)», чтобы избежать создания целой группы списков отбрасывания. – mgilson

ответ

1

При использовании Python 3 заменить izip с zip и xrange с range.

from itertools import islice, izip 

for i in xrange(0,len(nodes)): 
    fragment = nodes[i] 
    for l in xrange(0, length1): 
     # fragment1 was replaced by islice to avoid list creation 
     # It may or may not be faster. Try timing a version 
     # where you replace islice(Text, 1, l+k) with Text[l:int(l)+int(k)] 
     count = sum(f != f1 for f, f1 in izip(fragement, islice(Text, 1, l+k))) 
     if count <= Num_mismatches: 
      count2[i] += 1 
      # code smell: why have both result and result2? 
      result2[i] = fragment 
      result.append(fragment) 
      # you are not using maxval anywhere in these loops. 
      # you may want to set it after these loops. 
      if count2[i] > maxval: 
       maxval = count2[i] 

Существовало несколько мест, где вы проводили кастинг на int. Я удалил их, потому что похоже, что они уже есть int (Num_mismatches, l, k).

+0

Спасибо всем. Я новичок в python, и я ценю все ваши предложения. Я попробую их. Благодаря! – kdarbs

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