# [SOLVED] Indexing multidimensional Numpy array with another array

## Issue

Consider the following numpy array.

``````a = np.random.randn(10, 3, 20)
``````

When I index the array as follow, it produces another array with expected shape

``````b = a[0, :, 0:5]
b.shape = (3, 5)
``````

But when I index it with another numpy array but with similar elements, it produces a different array, which is transpose of the above result.

``````j = np.arange(0, 5, 1)
b = a[0, :, j]
b.shape = (5, 3)
``````

I couldn’t understand why this is the case.

## Solution

Tim Roberts summarized it excellently in the comments, which I’ll quote here in case the comments are cleaned up:

It’s subtle. The second example is concatenating a set of slices. If you print `a[0,:,0]`, you’ll see a 3-element slice, equal to the first row of the final b. Same with `a[0,:,1]`. The magic indexing takes those 5 3-element slices and returns then in a new array. A set of 5 slices is different from the array subset in `a[0,:,0:5]`.

In addition, if you notice, the two different indexing methods actually produce equivalent results; they’re just transposed versions of each other. So `a[0, :, np.arange(5)] == a[0, :, 0:5].T` and `a[0, :, np.arange(5)].T == a[0, :, 0:5]`.