Poniższy kod odtwarza Mam problem napotkany w algorytmie jestem obecnie wykonawcze:Dlaczego iteracyjne mnożenie macierzy elementowej spowalnia w 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
Problemem jest to, że po pewnej liczbie iteracji, sprawy zaczynają się stopniowo wolniej aż jedna iteracja trwa kilka razy więcej czas niż początkowo.
Działka spowolnienia
wykorzystanie procesora w procesie Python stałym poziomie około 17-18% przez cały czas.
Używam:
- Python 2.7.4 w wersji 32-bitowej;
- Numpy 1.7.1 z MKL;
- Windows 8.
Nie sądzę widzę ten problem z python-2.7.4 pod Linuksem. –
Jest to prawdopodobnie spowodowane liczbami denormalnymi: http://stackoverflow.com/a/9314926/226621 –
W moim teście uruchomionym, gdy tylko zaczęło zwalniać, przerywam go i 'print numpy.amin (numpy.abs (y [y! = 0])) 'i ma' 4.9406564584124654e-324', więc myślę, że denormalne liczby są twoją odpowiedzią. Nie wiem, jak wypłukać denormały do zera z poziomu Pythona innego niż tworzenie rozszerzenia C ... –