Gestion des Dimensions et des Données dans les Tableaux NumPy : Indexation, Redimensionnement et Types

NumPy est une bibliothèque essentielle en Python pour le calcul numérique, offrant des objets tableaux multidimensionnels et des outils pour travailler avec eux. Maîtriser l'indexation, le tranchage, la modification de la forme et des types de données est fondamental pour une manipulation efficace des données.

  1. Indexation et Tranchage des Tbaleaux

L'indexation permet d'accéder à des éléments spécifiques d'un tableau, tandis que le tranchage (slicing) permet d'extraire des sous-ensembles de données. Pour illustrer ces concepts, générons un tableau représentant les variations quotidiennes de cours pour plusieurs actions sur une période donnée.

Imaginons que nous voulions simuler les variations de prix de 5 actions sur 12 jours de bourse. Nous pouvons utiliser une distribution normale pour ces variations :

import numpy as np

# Génération des variations de cours pour 5 actions sur 12 jours
# Moyenne 0, écart-type 1 pour simuler des fluctuations aléatoires
variations_quotidiennes = np.random.normal(0, 1, (5, 12))
print("Tableau original des variations (5 actions, 12 jours) :")
print(variations_quotidiennes)

Accéder à des Éléments et des Plages

Pour récupérer les variations des deux premières actions durant les quatre premiers jours, nous utilisons le tranchage bidimensionnel :

# Récupérer les variations des deux premières actions (lignes 0 et 1)
# pour les quatre premiers jours (colonnes 0 à 3)
premiers_jours_actions = variations_quotidiennes[0:2, 0:4]
print("\nVariations des 2 premières actions sur les 4 premiers jours :")
print(premiers_jours_actions)

L'indexation peut s'étendre aux tableaux de dimensions supérieures. Par exemple, avec un tableau tridimensionnel :

# Exemple avec un tableau 3D
cube_donnees = np.array([
   [[10, 20, 30], [40, 50, 60]],
   [[70, 80, 90], [100, 110, 120]]
])
print("\nTableau 3D (cube_donnees) :")
print(cube_donnees)

# Accéder à un élément spécifique (par exemple, la valeur 50)
valeur_specifique = cube_donnees[0, 1, 1]
print(f"\nAccès à un élément (cube_donnees[0, 1, 1]) : {valeur_specifique}")

L'indexation dans les tableaux NumPy s'effectue toujours du niveau le plus général (l'axe le plus extérieur) au plus spécifique (l'axe le plus intérieur).

  1. Modification de la Forme des Tableaux

La modification de la forme d'un tableau est une opération courante, utile pour adapter les données à différentes exigences algorithmiques.

2.1. Utilisation de reshape() pour créer un nouveau tableau

La méthode reshape() renvoie un nouveau tableau avec la forme spécifiée, sans modifier le tableau original. Les données sont réarrengées pour s'adapter à la nouvelle structure.

# Reprenons les variations quotidiennes de 5 actions sur 12 jours
donnees_initiales = np.random.normal(0, 1, (5, 12))
print("\nDonnées initiales (5x12) :")
print(donnees_initiales)

# Reformater le tableau pour avoir 10 lignes et 6 colonnes
# Le produit des dimensions doit rester le même (5*12 = 60 éléments)
donnees_reformatees = donnees_initiales.reshape((10, 6))
print("\nDonnées après reshape (10x6) :")
print(donnees_reformatees)

# Utilisation de -1 : NumPy déduit automatiquement la dimension manquante
# Ici, si on veut 3 colonnes, NumPy calculera le nombre de lignes (60/3 = 20)
donnees_auto_formatees = donnees_initiales.reshape((-1, 3))
print("\nDonnées après reshape avec -1 (auto-lignes x 3 colonnes) :")
print(donnees_auto_formatees)

2.2. Modification de la forme avec resize() (en place)

Contrairement à reshape(), la méthode resize() modifie le tableau en place. Si la nouvelle forme nécessite plus d'éléments que l'original, les nouvelles positions sont remplies de zéros. Si elle en nécessite moins, les éléments excédentaires sont tronqués.

nouvelles_donnees = np.random.normal(0, 1, (4, 8))
print("\nNouvelles données originales (4x8) :")
print(nouvelles_donnees)

# Modifier la taille du tableau en place pour 6 lignes et 5 colonnes
# Note: Cela tronquera les données si la nouvelle taille est plus petite, ou ajoutera des zéros
nouvelles_donnees.resize((6, 5))
print("\nNouvelles données après resize en place (6x5) :")
print(nouvelles_donnees)

2.3. Transposition des Tableaux avec .T

La transposition est une opération qui échange les lignes et les colonnes d'un tableau. Pour un tableau 2D, cela signifie que la ligne i devient la colonne i.

matrice_originale = np.array([
   [1, 2, 3],
   [4, 5, 6],
   [7, 8, 9]
])
print("\nMatrice originale :")
print(matrice_originale)

matrice_transposee = matrice_originale.T
print("\nMatrice transposée (.T) :")
print(matrice_transposee)

  1. Modification des Types de Données

NumPy permet de facilement changer le type de données (dtype) des éléments d'un tableau, ce qui peut être utile pour optimiser la mémoire ou pour des opérations spécifiques.

Utilisation de astype()

La méthode astype() convertit les éléments du tableau en un nouveau type de données et retourne un nouveau tableau.

valeurs_decimales = np.random.uniform(0.0, 10.0, (3, 4))
print("\nTableau de valeurs décimales :")
print(valeurs_decimales)
print(f"Type de données original : {valeurs_decimales.dtype}")

# Convertir en entiers (les décimales seront tronquées)
valeurs_entieres = valeurs_decimales.astype(np.int64)
print("\nTableau converti en entiers (np.int64) :")
print(valeurs_entieres)
print(f"Nouveau type de données : {valeurs_entieres.dtype}")

Sérialisation des données avec tobytes()

La méthode tobytes() (préférée à tostring() dans les versions récentes de NumPy) convertit le contenu binaire du tableau en une séquence d'octets. C'est utile pour la sérialisation ou la trensmission de données brutes.

tableau_serialization = np.array([[10, 11], [12, 13]], dtype=np.int32)
print("\nTableau pour sérialisation (np.int32) :")
print(tableau_serialization)

donnees_binaires = tableau_serialization.tobytes()
print("\nReprésentation binaire (bytes) :")
print(donnees_binaires)

Le résultat est une chaîne d'octets (bytes) représentant la mémoire brute sous-jacente au tableau.

  1. Élimination des Doublons dans les Tableaux

La fonction np.unique() permet d'extraire les éléments uniques d'un tableau, en les retournant triés.

tableau_avec_doublons = np.array([
   [1, 5, 2],
   [3, 1, 4],
   [5, 6, 2]
])
print("\nTableau avec doublons :")
print(tableau_avec_doublons)

elements_uniques = np.unique(tableau_avec_doublons)
print("\nÉléments uniques triés :")
print(elements_uniques)

Étiquettes: NumPy Python Indexation Tranchage Redimensionnement

Publié le 26 juillet à 16h21