HOWTO · NumPy
Fonction numpy.random.permutation() dans NumPy
La fonction numpy.random.permutation() renvoie une copie permutée aléatoirement d'un tableau, ou une plage d'entiers permutée lorsqu'on lui passe un entier, et laisse les données d'origine inchangées — contrairement à numpy.random.shuffle(), qui mélange le tableau sur place.
Sur cette page
numpy.random.permutation() permute aléatoirement une séquence, ou renvoie une plage permutée. Passez-lui un tableau et elle renvoie une copie mélangée de ce tableau — l’original reste exactement tel qu’il était. Passez-lui un entier n et elle renvoie les entiers de 0 à n - 1 dans un ordre aléatoire. Ce comportement de copie plutôt que de modification est toute la différence avec numpy.random.shuffle(), qui mélange un tableau sur place.
Permuter un tableau sans modifier l’original
Avec un tableau, permutation() construit un nouveau tableau contenant les mêmes éléments dans un ordre aléatoire :
import numpy as np
original_array = np.array([1, 2, 3, 4, 5])
shuffled_array = np.random.permutation(original_array)
print("Original Array:", original_array)
print("Shuffled Array:", shuffled_array)
Sortie :
Original Array: [1 2 3 4 5]
Shuffled Array: [3 1 5 2 4]
L’ordre dans shuffled_array est aléatoire, donc la sortie ci-dessus est un résultat possible, et non ce que chaque exécution produit. Ce qui ne varie pas, c’est original_array : il contient toujours [1 2 3 4 5], ce qui fait de permutation() le bon choix lorsque l’ordre d’origine compte encore par la suite — par exemple, lorsqu’un jeu de données doit rester aligné avec ses étiquettes.
Avec un entier, permutation() renvoie une plage permutée, ce qui est un moyen pratique d’obtenir des indices aléatoires :
import numpy as np
n = 5
permuted_indices = np.random.permutation(n)
print("Permuted Indices:", permuted_indices)
Sortie :
Permuted Indices: [4 0 2 3 1]
Là encore, l’ordre exact diffère d’une exécution à l’autre. Passer un entier équivaut à construire d’abord la plage avec np.arange(n) et à permuter ce tableau.
Comparer permutation() et shuffle()
Les deux fonctions diffèrent par ce qu’elles renvoient et par ce qu’elles font à vos données. permutation() renvoie un nouveau tableau et ne touche jamais à son entrée. numpy.random.shuffle() ne renvoie rien et réorganise le tableau lui-même, sur place :
import numpy as np
original_array = np.array([1, 2, 3, 4, 5])
np.random.shuffle(original_array)
print("Shuffled Original Array:", original_array)
Sortie :
Shuffled Original Array: [2 5 1 4 3]
Après cet appel, l’ordre d’origine est perdu. Choisissez shuffle() lorsque vous n’en avez pas besoin et que vous souhaitez réorganiser sur place ; choisissez permutation() lorsque l’original doit survivre. Une conséquence pratique de la copie : sur un grand jeu de données, permutation() a besoin de mémoire pour le deuxième tableau, alors pesez ce confort par rapport à la mémoire supplémentaire lorsque les données sont volumineuses.