Idée
Imagine un cahier quadrille ou tu inscris des nombres dans des cases : une ligne, un rectangle de lignes et de colonnes, ou un pave de plusieurs feuilles empilées.
Pourquoi
Imagine un cahier quadrille ou tu inscris des nombres dans des cases : une ligne, un rectangle de lignes et de colonnes, ou un pave de plusieurs feuilles empilées. Numpy donne un nom unique (np.array) a ce sac de cases et garde en mémoire sa forme (combien de lignes, combien de colonnes, combien de feuilles). C'est exactement la structure des $n$-uplets, matrices et tenseurs vus en algèbre linéaire de MPSI : un vecteur $A \in \mathbb{R}^3$, une matrice $C \in \mathcal{M}_{3,2}(\mathbb{R})$, un tenseur $G \in \mathbb{R}^{2 \times 3 \times 4}$. La propriété .shape est l'analogue écrit du couple $(p,q)$ d'une matrice.
Outil
Vecteurs et matrices d'algèbre linéaire de MPSI : $A \in \mathbb{R}^n$, $C \in \mathcal{M}_{p,q}(\mathbb{R})$, generalises en tenseurs d'ordre 3 ou plus.
Formule
Le PDF p1 énumère plusieurs constructeurs Numpy avec des formes spécifiques. Sans regarder, donner la valeur de .shape pour une matrice 3×3 nulle, et le .ndim pour le tenseur aléatoire 2×3×4. Ces valeurs sont nécessaires pour vérifier qu'un calcul matriciel fonctionne avant de l'exécuter.
Piège
L'apprenant MPSI tend à voir np.array([1,2,3]) comme un vecteur colonne $\mathbb{R}^3$ qu'il pourrait transposer pour obtenir un vecteur ligne. C'est faux : un tableau 1D Numpy n'a pas d'orientation, sa shape est (3,) (un seul axe), et .T est l'identité dessus. Pour obtenir un vrai vecteur colonne il faut écrire np.array([[1],[2],[3]]) (shape (3,1)) ou .reshape(-1,1). Cette confusion casse silencieusement les calculs matriciels par broadcasting non désiré.