#### 1D array

To randomly shuffle a 1D array in python, there is the numpy function called: shuffle, illustration with the following array:

\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)`

`>>> M`

`array([15, 16, 8, 42, 23, 4])`

`>>> np.random.shuffle(M)`

`>>> M`

`array([ 8, 42, 23, 15, 16, 4])`

`>>>`

#### 2D (or more) array

** Warning **: In the case of a 2D array the function shuffle is going to permute randomly the array rows. Example:

\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]])`

`>>> M`

`array([[1, 2, 3],`

`[4, 5, 6],`

`[7, 8, 9]])`

`>>> np.random.shuffle(M)`

`>>> M`

`array([[7, 8, 9],`

`[1, 2, 3],`

`[4, 5, 6]])`

`>>> np.random.shuffle(M)`

`>>> M`

`array([[4, 5, 6],`

`[7, 8, 9],`

`[1, 2, 3]])`

To randomly shuffle a 2D(or more) array in python, it is necessary to transform the array to a 1d array (using ravel function), then using shuffle and reshape the array to its original shape:

`>>> import numpy as np`

`>>> M = np.array([[1,2,3],[4,5,6],[7,8,9]])`

`>>> M`

`array([[1, 2, 3],`

`[4, 5, 6],`

`[7, 8, 9]])`

`>>> M = M.ravel()`

`>>> M`

`array([1, 2, 3, 4, 5, 6, 7, 8, 9])`

`>>> np.random.shuffle(M)`

`>>> M`

`array([3, 1, 9, 5, 2, 8, 4, 7, 6])`

`>>> M = M.reshape(3,3)`

`>>> M`

`array([[3, 1, 9],`

`[5, 2, 8],`

`[4, 7, 6]])`

returns

\begin{equation}

M =

\left( \begin{array}{ccc}

3 & 1 & 9 \\

5 & 2 & 8 \\

4 & 7 & 6

\end{array}\right)

\end{equation}

### References

Link | Source |
---|---|

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 |