Одним из способов является явное указание индекса каждого элемента результата, где ключевое отличие состоит в том, что спецификация строки должна быть 2d:
>>> np.random.seed(444)
>>> arr = np.random.randint(10, size=(6, 4))
>>> arr
array([[3, 0, 7, 8],
[3, 4, 7, 6],
[8, 9, 2, 2],
[2, 0, 3, 8],
[0, 6, 6, 0],
[3, 0, 6, 7]])
>>> rows = [[0],
... [-1]]
>>> cols = [0, 1, -1]
>>> arr[rows, cols]
array([[3, 0, 8],
[3, 0, 7]])
В этом примере используется широковещательная передача для индекса строки,Другими словами, вы можете воспользоваться тем фактом, что строки повторяются для оставшихся двух столбцов в дополнение к 0-му.
Чтобы использовать расширенную индексацию, необходимо явно выбрать все элементы.... Однако, так как вышеупомянутые массивы индексации повторяются, вещание может использоваться.Пример, в котором вы не могли бы воспользоваться преимуществами широковещания и должен был бы указать каждый отдельный индекс, будет выглядеть примерно так:
rows = [[1, 2],
[3, 4]]
cols = [[2, 3],
[1, 0]]
В этом случае вы выбираете элементы в (1,2), (2, 3), ...
См. этот пример из документации.
Вы можете заметить, что это именно то, что производится np.ix_
(хотя я не говорю, что это не полезная функция):
>>> rows, cols = np.ix_((0, -1),(0, 1, 3))