Vectorisation — boucler sans boucler

Idée

Au lieu d'écrire une boucle qui parcourt chaque case, on demande l'opération sur le tableau entier en une ligne, et la machine s'occupe du reste en mode rapide.

Outil

C'est l'écriture algébrique d'un calcul : on écrit $\lambda v$ ou $u+v$ une fois, sans détailler les coordonnées. NumPy lit cette écriture et la déroule en interne, sans qu'on ait à le faire en Python.

Formule

Cell 17 illustre la philosophie Numpy. Sans regarder, expliquer pourquoi le notebook préfère np.cos(A) à [cos(a) for a in A].

Piège

Tentation : for i in range(N): A[i] = sin(B[i]). Ça est une boucle Python, pas du vectorisation. La vraie vectorisation est A = np.sin(B) : appel unique à la routine compilée. Sur un million d'éléments, la boucle Python peut être 100× plus lente. Vectoriser, c'est éliminer la boucle Python, pas la déguiser.