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.
Pourquoi
Au lieu d'écrire une boucle for Python qui parcourt chaque case, on demande l'opération sur le tableau entier en une ligne, et NumPy s'occupe du reste en mode rapide. 2*A, np.cos(A), A+B, (A>2)*A sont tous des exemples : la boucle reste cachée dans la machinerie NumPy, écrite en C, et tourne typiquement 10 à 100 fois plus vite qu'une boucle Python explicite.
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.