В NumPy индексация элементов массива работает похоже на списки Python, но расширена для многомерных массивов.

Основные способы:

  1. Индексация по отдельной оси
  • 1D массив:
import numpy as np
a = np.array([10, 20, 30, 40])
print(a[0])  # 10
print(a[-1]) # 40
  • 2D массив (матрица):
M = np.array([[1, 2, 3],
              [4, 5, 6]])
print(M[0, 1])  # 2 (строка 0, столбец 1)
print(M[1, 2])  # 6 (строка 1, столбец 2)
  1. Срезы (slice)
  • 1D:
a[1:3]  # [20 30] — элементы с индексами 1 и 2
  • 2D:
M[:, 1]  # [2 5] — все строки, столбец 1
M[1, :]  # [4 5 6] — строка 1, все столбцы
M[0:2, 0:2]  # [[1 2], [4 5]] — верхний левый 2x2 блок
  1. Индексация списком индексов / маской
  • Списком:
a[[0, 2]]  # [10 30]
  • Логическая маска:
a[a > 20]  # [30 40]
  1. Fancy indexing и broadcasting
  • Можно комбинировать массивы индексов и срезы:
M[np.array([0,1]), np.array([2,0])]  # [3 4] — элементы (0,2) и (1,0)

Особенности:

  • Срезы возвращают view (обычно), не копию
  • Fancy indexing и маски возвращают копию
  • Поддерживается индексация с отрицательными числами, boolean-массивами и многомерная индексация