Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

contenu de ce notebook (notebook optionnel)

on a vu jusqu’ici comment indexer un tableau (quand on écrit valeurs[indices]):

ce que nous appelons ici indexation avancée,
c’est la possibilité d’indexer un tableau avec .. un ou plusieurs autres tableaux d’entiers
c’est-à-dire d’écrire array1[array2] ou encore array1[(array2, array3)]

valeurs en dimension 1

array([ 0, 10, 20, 30, 40])

voyons le cas le plus simple, de forme array1[array2]

on va pouvoir indexer valeurs par n’importe quel tableau qui ne contient que des entiers entre 0 et 4
(parce qu’ils seront interprétés comme des indices dans valeurs qui est de taille 5)

et le résultat de valeurs[indices] va être un tableau de la même forme qu’indices
et qui contiendra les valeurs[indice] pour chaque case indice de indices

c’est donc en quelque sorte la version vectorisée de l’indexation par un entier...

array([ 0, 20, 30, 10, 30, 10, 20, 0, 30, 20, 30])
array([[20, 20], [20, 20]])

donc si on essaie de formaliser un peu, lorsque valeurs est de dimension 1

valeurs[indices] aura un sens si

valeurs en dimension 2

array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33]])

c’est bien sûr la même logique
sauf que cette fois on va avoir envie de .. passer deux tableaux d’indices, puisque valeurs est de dimension 2

avec deux indices de dim 1

array([10, 22, 1, 33])

avec deux indices de dim 2

bien sûr on peut aussi utiliser des indices de formes en dimensions supérieures

array([[ 0, 10], [23, 23]])

avec un seul indice

on peut même ne donner qu’un seul indice !

souvenez-vous, dans le cas hyper simple où vous avez un tableau de 2 dimension et que vous écrivez array[2], vous récupérez la deuxième ligne

ici ça va être pareil: le résultat a une dimension de plus que le tableau d’indices, pour pouvoir ranger à chaque fois toute la ligne valeurs[i]

array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33]])

avant d’exécuter la prochaine cellule, essayez de calculer mentalement sa forme

si on avait donné deux indices, on aurait obtenu un tableau carré 2x2 mais comme il manque une dimension, à chaque coordonnée (i, j) dans le tableau d’indices, on va récupérer une ligne (qui dans notre tableau de valeurs est de longueur 4)

donc le résultat est de forme ...

array([[[ 0, 1, 2, 3], [20, 21, 22, 23]], [[10, 11, 12, 13], [30, 31, 32, 33]]])
si on faisait une indexation complète on obtiendrait (2, 2)
l'indexation partielle nous donne ici (2, 2, 4)

exemple: une colormap

c’est cette technique que nous avons utilisée dans le TP ‘image-2’, pour coder la fonction patchwork

imaginons qu’on a en entrée 5 couleurs (en comptant la couleur de remplissage);
et qu’on doit remplir un rectangle de 2 x 3 patches

et faisons pour commencer abstraction de la taille de chaque patch

<Figure size 640x480 with 1 Axes>

si on prend en compte la taille des patches, le tableau pattern devient un peu plus compliqué, mais c’est toujours le même principe :

<Figure size 640x480 with 1 Axes>