Why does indexing numpy arrays with brackets and commas differ in behavior?

When you slice multi dimension of array, if fewer indices are provided than the number of axes, the missing indices are considered complete slices. Hence, when you are essentially doing when calling x[:][1] is x[:,:][1,:] Therefore, x[:,:] will just return x itself.


This:

x[:, 1]

means "take all indices of x along the first axis, but only index 1 along the second".

This:

x[:][1]

means "take all indices of x along the first axis (so all of x), then take index 1 along the first axis of the result". You're applying the 1 to the wrong axis.

x[1][2] and x[1, 2] are only equivalent because indexing an array with an integer shifts all remaining axes towards the front of the shape, so the first axis of x[1] is the second axis of x. This doesn't generalize at all; you should almost always use commas instead of multiple indexing steps.