ниже код воспроизводит эту проблему я столкнулся в алгоритме я в настоящее время реализует:Почему итеративное умножение массива элементов уменьшено в numpy?
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.
Я не думаю, что я вижу это поведение с помощью питона-2.7.4 под Linux. –
Возможно, это связано с денормальными номерами: http://stackoverflow.com/a/9314926/226621 –
В моем тестовом прогоне, как только он начал замедляться, я прервал его и сделал 'print numpy.amin (numpy.abs (numpy.abs) y [y! = 0])) 'и получил' 4.9406564584124654e-324', поэтому я считаю, что денормальные числа - ваш ответ. Я не знаю, как очистить денормалы до нуля изнутри Python, кроме создания расширения C, хотя ... –