Comment translater / décaler les elements d'une matrice sous python ?

Published: 21 décembre 2017

DMCA.com Protection Status

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