Первый выбирает целый столбец для каждого элемента r
.Второй просто стихия.Вы можете напрямую сравнить два случая следующим образом:
>>> P = np.arange(12).reshape(4, 3)
>>> r = np.random.randint(0, 3, (4,))
>>> r
array([1, 1, 2, 0])
>>>
>>> P[:, r]
array([[ 1, 1, 2, 0],
[ 4, 4, 5, 3],
[ 7, 7, 8, 6],
[10, 10, 11, 9]])
>>> P[np.arange(4), r]
array([1, 4, 8, 9])
Как вы можете видеть, второе дает по существу диагональ первого.
Вы можете получить прибыль, посмотрев в раздел «Объединение».расширенное и базовое индексирование »в документах numpy .