В приведенном ниже коде воспроизводится проблема, с которой я столкнулся в алгоритме, который я сейчас реализую:
import numpy.random as rand
import time
x = rand.normal(size=(300,50000))
y = rand.normal(size=(300,50000))
for i in range(1000):
t0 = time.time()
y *= x
print "%.4f" % (time.time()-t0)
y /= y.max() #to prevent overflows
Проблема заключается в том, что после некоторого количества итераций все начинает постепенно замедляться, пока одна итерация не займет много раз больше времени, чем первоначально.
График замедления
Использование процессора процессом Python стабильно составляет 17-18% всего времени.
Я использую:
- Python 2.7.4 32-разрядная версия;
- Numpy 1.7.1 с MKL;
- Windows 8.