Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Vous êtes un professionnel et vous avez besoin d'une formation ? Mise en oeuvre d'IHM
avec Qt et PySide6
Voir le programme détaillé

Changer la forme des tableaux NumPy et manipuler les axes

Copies, vues et effets de bord Opérations vectorisées et ufuncs


Accès rapide :
Introduction
Modifier la forme avec reshape
Laisser NumPy calculer une dimension
Les formes incompatibles
Aplatir un tableau
Transposer une matrice
Ajouter ou supprimer une dimension
Assembler des tableaux
Découper un tableau

Introduction

Un tableau NumPy possède un nombre total d'éléments et une forme. Tant que le nombre total d'éléments reste le même, il est souvent possible de présenter les données autrement : sous forme de vecteur, de matrice ou de tableau à plusieurs dimensions.

Ces opérations sont très fréquentes lorsque l'on prépare des données pour un calcul, un affichage ou une bibliothèque de machine learning. Elles ne modifient pas toujours les données elles-mêmes : elles changent parfois seulement la manière de les parcourir.

Modifier la forme avec reshape

La méthode reshape permet de changer la forme logique d'un tableau. Le nombre total d'éléments doit rester identique.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
import numpy as np

data = np.arange(12)
m = data.reshape(3, 4)

print(data)
print(m)
Transformation d'un vecteur en matrice

[ 0  1  2  3  4  5  6  7  8  9 10 11]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

Le tableau initial contient douze valeurs. Il peut donc être transformé en matrice de trois lignes et quatre colonnes.

Laisser NumPy calculer une dimension

On peut utiliser -1 pour demander à NumPy de calculer automatiquement une dimension. C'est pratique quand une seule dimension est inconnue.

 1 
 2 
 3 
 4 
 5 
 6 
import numpy as np

data = np.arange(12)

print(data.reshape(2, -1))
print(data.reshape(-1, 3).shape)
Utilisation de -1 avec reshape

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]
(4, 3)

Dans le premier cas, NumPy comprend qu'il faut produire deux lignes et six colonnes. Dans le second, il calcule qu'il faut quatre lignes pour obtenir des groupes de trois valeurs.

Les formes incompatibles

Une forme incompatible provoque une erreur. C'est normal : dix valeurs ne peuvent pas remplir une matrice de trois lignes et quatre colonnes.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
import numpy as np

try:
    np.arange(10).reshape(3, 4)
except ValueError as error:
    print(type(error).__name__)
    print(error)
Erreur de forme incompatible

ValueError
cannot reshape array of size 10 into shape (3,4)

Aplatir un tableau

Les fonctions ravel et flatten permettent de revenir à un vecteur. La différence est importante : ravel peut retourner une vue, alors que flatten retourne une copie.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
import numpy as np

m = np.arange(6).reshape(2, 3)
view = m.ravel()
copy = m.flatten()

view[0] = 100
copy[1] = 200

print(m)
print(view)
print(copy)
Différence entre ravel et flatten

[[100   1   2]
 [  3   4   5]]
[100   1   2   3   4   5]
[  0 200   2   3   4   5]

La modification faite dans view est visible dans la matrice d'origine. La modification faite dans copy reste isolée.

Transposer une matrice

La transposition inverse les axes d'une matrice : les lignes deviennent des colonnes et les colonnes deviennent des lignes.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
import numpy as np

m = np.array([[1, 2, 3], [4, 5, 6]])

print(m)
print(m.T)
print(m.T.shape)
Transposition d'une matrice

[[1 2 3]
 [4 5 6]]
[[1 4]
 [2 5]
 [3 6]]
(3, 2)

Ajouter ou supprimer une dimension

Ajouter une dimension de taille un permet souvent de préparer un tableau pour le broadcasting. C'est une manière explicite de dire si un vecteur doit être vu comme une ligne ou comme une colonne.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
import numpy as np

v = np.array([10, 20, 30])

row = v[np.newaxis, :]
col = v[:, np.newaxis]

print(row.shape)
print(col.shape)
print(np.squeeze(col).shape)
Utilisation de newaxis et squeeze

(1, 3)
(3, 1)
(3,)

Assembler des tableaux

NumPy propose plusieurs fonctions pour assembler des tableaux. concatenate colle les tableaux sur un axe existant, tandis que stack crée un nouvel axe.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

print(np.concatenate([a, b]))
print(np.stack([a, b]))
print(np.vstack([a, b]))
print(np.hstack([a, b]))
Concaténation et empilement

[1 2 3 4 5 6]
[[1 2 3]
 [4 5 6]]
[[1 2 3]
 [4 5 6]]
[1 2 3 4 5 6]

Découper un tableau

L'opération inverse consiste à découper un tableau en plusieurs morceaux avec split.

 1 
 2 
 3 
 4 
 5 
import numpy as np

data = np.arange(12)

print(np.split(data, 3))
Découpage avec split

[array([0, 1, 2, 3]), array([4, 5, 6, 7]), array([ 8,  9, 10, 11])]

Copies, vues et effets de bord Opérations vectorisées et ufuncs




Vous êtes un professionnel et vous avez besoin d'une formation ? Sensibilisation à
l'Intelligence Artificielle
Voir le programme détaillé