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))
>>> A
array([[ 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 |