3.3. Indexer un tableau

Comment récupérer une partie d’un tableau (ou modifier une partie d’un tableau).

Récupérer les indices correspondants à un range:

a = np.random.rand(10)

print(a)
print(a[1])
print(a[-2])
print(a[1:4])
print(a[1:4:2])
[0.57282812 0.89578413 0.91332692 0.90384574 0.24068243 0.11350129
 0.73715458 0.27632517 0.19398931 0.2609887 ]
0.8957841301214312
0.19398930877340892
[0.89578413 0.91332692 0.90384574]
[0.89578413 0.90384574]

On rappelle que l’on commence toujours à l’indice 0 et que un range(n1, n2) contient n2-n1 éléments (le dernier est donc n2-1). Les indices négatifs sont pris modulo la longueur du tableau (donc -2 est pareil que len(a) - 2.

Il est aussi possible de filtrer des données, par exemple pour récupérer des données selon un critère.

a = np.arange(4)

mask = [False, True, True, False]
print(a[mask])
[1 2]

Souvent le mask provient d’un tableau de booléen calculé automatiquement.

a = np.random.normal(size=10000)
mask = (a>=0)

print(a[mask].mean()) # Moyenne des tirages positifs
0.7916986492813732

Voici par exemple une façon de calculer la valeur absolue qui est vectorisée:

def valeur_absolue(x):
    result = np.empty_like(x)
    result[x<=0] = -x
    result[x>0] = x
    return result

Pour les tableau 2D, on peut récupérer toute la colonne (ou ligne) en mettant simplement un : :

b = np.random.rand(3, 2)
print(b)
print(b[1, 0])
print(b[:,0]) # première colone
print(b[:,1])
[[0.18615233 0.47605384]
 [0.28514889 0.07586353]
 [0.94335752 0.19762579]]
0.28514889075726646
[0.18615233 0.28514889 0.94335752]
[0.47605384 0.07586353 0.19762579]