Pour mélanger aléatoirement les éléments d'une matrice 1D il existe la fonction numpy shuffle, exemple avec la matrice suivante:
\begin{equation}
M =
\left( \begin{array}{cccccc}
4 & 8 & 15 & 16 & 23 & 42
\end{array}\right)
\end{equation}
>>> import numpy as np>>> M = np.array([4,8,15,16,23,42])>>> np.random.shuffle(M)>>> Marray([15, 16, 8, 42, 23, 4])>>> np.random.shuffle(M)>>> Marray([ 8, 42, 23, 15, 16, 4])>>>
Pour une matrice de dimension 2 ou supérieur la fonction numpy shuffle ne va pas mélanger aléatoirement les éléments de la matrice mais uniquement permuter aléatoirement les lignes de la matrice, exemple avec la matrice:
\begin{equation}
M =
\left( \begin{array}{ccc}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{array}\right)
\end{equation}
>>> import numpy as np>>> M = np.array([[1,2,3],[4,5,6],[7,8,9]])>>> Marray([[1, 2, 3],[4, 5, 6],[7, 8, 9]])>>> np.random.shuffle(M)>>> Marray([[7, 8, 9],[1, 2, 3],[4, 5, 6]])>>> np.random.shuffle(M)>>> Marray([[4, 5, 6],[7, 8, 9],[1, 2, 3]])
Pour mélanger aléatoirement les éléments d'une matrice multidimensionnelle il faut donc d'abord la transformer en matrice 1d, mélanger aléatoirement les éléments avec shuffle et redimensionner la matrice:
>>> import numpy as np>>> M = np.array([[1,2,3],[4,5,6],[7,8,9]])>>> Marray([[1, 2, 3],[4, 5, 6],[7, 8, 9]])>>> M = M.ravel()>>> Marray([1, 2, 3, 4, 5, 6, 7, 8, 9])>>> np.random.shuffle(M)>>> Marray([3, 1, 9, 5, 2, 8, 4, 7, 6])>>> M = M.reshape(3,3)>>> Marray([[3, 1, 9],[5, 2, 8],[4, 7, 6]])
Résultat
\begin{equation}
M =
\left( \begin{array}{ccc}
3 & 1 & 9 \\
5 & 2 & 8 \\
4 & 7 & 6
\end{array}\right)
\end{equation}
Recherches associées
| Liens | Site |
|---|---|
| numpy.random.shuffle | docs.scipy.org |
| numpy.random.permutation | docs.scipy.org |
| shuffle vs permute numpy | stackoverflow |
| Numpy shuffle multidimensional array by row only, keep column order unchanged | stackoverflow |
