Yat-il un moyen d'accélérer une double boucle qui met à jour ses valeurs de l'itération précédente?Accélérez double boucle en Python
Dans le code:
def calc(N, m):
x = 1.0
y = 2.0
container = np.zeros((N, 2))
for i in range(N):
for j in range(m):
x=np.random.gamma(3,1.0/(y*y+4))
y=np.random.normal(1.0/(x+1),1.0/sqrt(x+1))
container[i, 0] = x
container[i, 1] = y
return container
calc(10, 5)
Comme vous pouvez le voir, la boucle intérieure est mise à jour des variables x et y tandis que la boucle externe commence par une valeur différente de x à chaque fois. Je ne pense pas que cela soit vectorisable mais peut-être y a-t-il d'autres améliorations possibles.
Merci!
« la seconde boucle est mise à jour des variables x et y tandis que la première boucle commence par une valeur différente de x à chaque fois » - Je ne suis pas sûr de ce que vous signifie par là. En particulier, je ne sais pas ce que vous entendez par "commence avec une valeur différente de x à chaque fois", et "première" ou "deuxième" boucle est plutôt floue par rapport à "interne" ou "externe". Je ne suis pas tout à fait sûr de savoir lequel est quoi. – user2357112
Désolé, je ne peux pas penser à beaucoup plus que de remplacer 'range' par' xrange'. Peut-être que vous devriez mettre une prime sur la question pour attirer un expert «numpy» – inspectorG4dget
Désolé. Tu as raison. Je vais changer la première ou la deuxième boucle. Par _start avec une valeur différente de x à chaque fois_, je veux dire que la première itération de la boucle externe commence par x = 1.0. Cependant, x est modifié dans la boucle interne. Par conséquent, dans la deuxième itération de la boucle externe, x est une autre valeur. –