# What does this python syntax mean?

I’m trying to understand the following syntax:

``````permutation = list(np.random.permutation(m))
shuffled_X = X[:, permutation]
shuffled_Y = Y[:, permutation].reshape((1, m))
``````

and

``````first_mini_batch_X = shuffled_X[:, 0 : mini_batch_size]
second_mini_batch_X = shuffled_X[:, mini_batch_size : 2 * mini_batch_size]

``````

In the first example, I don’t understand what’s happening with permutations. and In both, I don’t understand the syntax of putting a comma after a `;` while indexing a list.

any help would be much appreciated.

Hi, @ocg.

The `,` separates dimensions. Here `shuffled_X` is a two-dimensional array of shape `(input size, number of examples)`, so `shuffled_X[:, 0 : mini_batch_size]` selects all inputs (`:`) for the first `mini_batch_size` examples (`0 : mini_batch_size`).

np.random.permutation returns a permuted range from `0` to `m-1`, so `X[:, permutation]` selects all inputs (`:`) for all the examples arranged in a random order determined by `permutation` (i.e., it shuffles the examples).

NumPy’s documentation explains it much better, so I recommend you take a look at it too

1 Like

Hi @nramon,

Thank you for the explanation. Since

``````shuffled_Y = Y[:, permutation]
``````

keeps the same shape as Y, I am wondering why do we need to reshape `shuffled_Y` using:

``````shuffled_Y = Y[:, permutation].reshape((1, m))
``````

but not `shuffled_X`?

I believe the reshape method is to prevent the loss of a dimension with size 1 that sometimes occurs when dealing with numpy arrays.

In the case of shuffled_X it is not necessary since its shape is `(input size, number of examples)` which are presumibly not of size 1.

1 Like

@kampamocha

That now makes sense.

Thank you!