In [117]: A = np.array([[28,39,52],[77,80,66],[7,18,24],[9,97,68]])
In [118]: B = [1,0,2,0]
Чтобы выбрать один элемент из каждой строки, нам нужно проиндексировать строки с помощью массива, который соответствует B
:
In [120]: A[np.arange(4),B]
Out[120]: array([39, 77, 24, 9])
И мы можем установить те же элементы с помощью:
In [121]: A[np.arange(4),B] = 0
In [122]: A
Out[122]:
array([[28, 0, 52],
[ 0, 80, 66],
[ 7, 18, 0],
[ 0, 97, 68]])
Это завершает индексацию точек с помощью индексов (0,1), (1,0), (2,2), (3,0).
Транспонирование на основе спискагенерирует одинаковые пары:
In [123]: list(zip(range(4),B))
Out[123]: [(0, 1), (1, 0), (2, 2), (3, 0)]