# Values in numpy matrix based on an array using index and value of each element

I would like to use a numpy array to index a numpy matrix using the values of the array indicating the columns, and indices indicating the corresponding row numbers.As an example, I have a numpy matrix,

``````a = np.tile(np.arange(1920), (41, 1))
>>> [[0, 1, 2, ..., 1919]
[0, 1, 2, ..., 1919]
...
[0, 1, 2, ..., 1920]]
b = np.arange(40, -1, -1) # We want to do a[b] in the most efficient way.
``````

What I would like to get is an array `c` which is,

``````c = [40, 39, 38, ..., 0]
``````

That is, I want to use `b` to get the following indices from `a`,

``````[(0, b[0]), (1, b[1]), ... (40, b[40])] # 0th row b[0]th column, 1st row b[1]th column...
``````

How do I do this, and what is the most efficient way to do this?

### >Solution :

You can use advanced indexing with 2 integer arrays. For the 0th axis ("the rows"), you simply use `0..n` (can be generated using np.arange) with `n` the length of `b`. For the 1st axis ("the columns"), you use `b`:

``````import numpy as np

# Setup:
a = np.tile(np.arange(1920), (41, 1))
b = np.arange(40, -1, -1)

# Solution:
c = a[np.arange(len(b)), b]
``````

c:

``````array([40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24,
23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10,  9,  8,  7,
6,  5,  4,  3,  2,  1,  0])
``````