Le code ci-dessous reproduit le problème que je l'ai rencontré dans l'algorithme je met actuellement en œuvre:Pourquoi la multiplication de tableaux itératifs par éléments ralentit-elle en 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
Le problème est que, après un certain nombre d'itérations, les choses commencent à se progressivement plus lentement jusqu'à une itération prend plusieurs fois plus temps que initialement.
Une parcelle du ralentissement
utilisation du processeur par le processus Python est stable autour de 17-18% tout le temps.
J'utilise:
- Python 2.7.4 version 32 bits;
- Numpy 1.7.1 avec MKL;
- Windows 8.
Je ne pense pas que je vois ce comportement avec python-2.7.4 sous Linux. –
C'est probablement dû à des nombres dénormaux: http://stackoverflow.com/a/9314926/226621 –
Dans mon test, dès qu'il a commencé à ralentir, je l'ai interrompu et j'ai fait 'print numpy.amin (numpy.abs (y [y! = 0])) 'et obtenu' 4.9406564584124654e-324', donc je pense que les nombres dénormaux sont votre réponse. Je ne sais pas comment vider les dénormaux de zéro à partir de Python autre que de créer une extension C si ... –