В NumPy индексация элементов массива работает похоже на списки Python, но расширена для многомерных массивов.
Основные способы:
- Индексация по отдельной оси
- 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)- Срезы (
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 блок- Индексация списком индексов / маской
- Списком:
a[[0, 2]] # [10 30]- Логическая маска:
a[a > 20] # [30 40]- Fancy indexing и broadcasting
- Можно комбинировать массивы индексов и срезы:
M[np.array([0,1]), np.array([2,0])] # [3 4] — элементы (0,2) и (1,0)Особенности:
- Срезы возвращают view (обычно), не копию
- Fancy indexing и маски возвращают копию
- Поддерживается индексация с отрицательными числами, boolean-массивами и многомерная индексация