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]