For example, I have two numpy arrays,
A = np.array(
[[0,1],
[2,3],
[4,5]])
B = np.array(
[[1],
[0],
[1]], dtype='int')
A
B
C = np.array(
[[1],
[2],
[5]])
A[:, B.ravel()]
B
np.take
np.choose
A
np.choose(B.ravel(), A.T)
You can use NumPy's purely integer array indexing

A[np.arange(A.shape[0]),B.ravel()]
Sample run 
In [57]: A
Out[57]:
array([[0, 1],
[2, 3],
[4, 5]])
In [58]: B
Out[58]:
array([[1],
[0],
[1]])
In [59]: A[np.arange(A.shape[0]),B.ravel()]
Out[59]: array([1, 2, 5])
Please note that if B
is a 1D
array or a list of such column indices, you could simply skip the flattening operation with .ravel()
.
Sample run 
In [186]: A
Out[186]:
array([[0, 1],
[2, 3],
[4, 5]])
In [187]: B
Out[187]: [1, 0, 1]
In [188]: A[np.arange(A.shape[0]),B]
Out[188]: array([1, 2, 5])