Diffusion d'un scalaire (broadcasting de base)

Idée

Multiplier un tableau par un nombre seul, comme 2*A, c'est multiplier chaque case par ce nombre.

Pourquoi

Multiplier un tableau par un nombre seul, comme 2*A, c'est multiplier chaque case par ce nombre. Le scalaire se propage à toutes les cases sans qu'on ait à écrire de boucle. C'est le cas le plus simple d'un mécanisme général qui étend l'opération quand les formes ne coïncident pas exactement.

Outil

Comme la multiplication d'un vecteur par un scalaire $\lambda \cdot v = (\lambda v_1, \ldots, \lambda v_n)$ en algèbre linéaire — sauf qu'ici ça marche aussi pour les matrices et les tenseurs.

Formule

Cell 17 illustre le broadcasting d'une fonction Numpy sur un tableau. Sans regarder, donner la forme (shape et dtype, pas les valeurs numériques) de la sortie.

Piège

Quand on écrit A + 2, on visualise mentalement un tableau [2,2,2] créé puis additionné. Numpy ne crée PAS ce tableau : il itère à la volée avec un seul scalaire. Pour de gros tableaux, c'est crucial : la version conceptuelle 'naïve' aurait double consommation mémoire ; la version Numpy reste constante. Conséquence pratique : on peut additionner un scalaire à une matrice de 1 milliard d'éléments sans problème.