Sous python pour translater / décaler les elements d'une matrice il existe la fonction numpy roll. Exemple on veut décaler les éléments de la matrice A de deux colonnes:
\begin{equation}
A =
\left( \begin{array}{cccc}
7 & 12 & 7 & 10 & 19 & 11 & 0 & 18 \\
7 & 7 & 16 & 13 & 15 & 1 & 16 & 14 \\
0 & 9 & 11 & 16 & 11 & 7 & 3 & 11 \\
16 & 0 & 4 & 6 & 7 & 8 & 17 & 18 \\
\end{array}\right)
\end{equation}
>>> import numpy as np>>> A = np.random.randint(20, size=(4, 8))>>> Aarray([[ 7, 12, 7, 10, 19, 11, 0, 18],[ 7, 7, 16, 13, 15, 1, 16, 14],[ 0, 9, 11, 16, 11, 7, 3, 11],[16, 0, 4, 6, 7, 8, 17, 18]])>>> np.roll(A,2)array([[17, 18, 7, 12, 7, 10, 19, 11],[ 0, 18, 7, 7, 16, 13, 15, 1],[16, 14, 0, 9, 11, 16, 11, 7],[ 3, 11, 16, 0, 4, 6, 7, 8]])>>>
donne bien
\begin{equation}
\left( \begin{array}{cccc}
17 & 18 & 7 & 12 & 7 & 10 & 19 & 11 \\
0 & 18 & 7 & 7 & 16 & 13 & 15 & 1 \\
16 & 14 & 0 & 9 & 11 & 16 & 11 & 7 \\
3 & 11 & 16 & 0 & 4 & 6 & 7 & 8 \\
\end{array}\right)
\end{equation}
on peut également choisir l'axe sur lequel on translate les éléments:
>>> np.roll(A,2,axis=1)array([[ 0, 18, 7, 12, 7, 10, 19, 11],[16, 14, 7, 7, 16, 13, 15, 1],[ 3, 11, 0, 9, 11, 16, 11, 7],[17, 18, 16, 0, 4, 6, 7, 8]])
donne ici
\begin{equation}
\left( \begin{array}{cccc}
0 & 18 & 7 & 12 & 7 & 10 & 19 & 11 \\
16 & 14 & 7 & 7 & 16 & 13 & 15 & 1 \\
3 & 11 & 0 & 9 & 11 & 16 & 11 & 7 \\
17 & 18 & 16 & 0 & 4 & 6 & 7 & 8 \\
\end{array}\right)
\end{equation}
Références
| Liens | Site |
|---|---|
| numpy.roll | scipy doc |
| numpy.random.randint | scipy doc |
