Срезы (slice) в NumPy — это способ выбрать часть массива по одной или нескольким осям. Они похожи на срезы списков в Python, но расширены для многомерных массивов.

Синтаксис:

start:stop:step
  • start — индекс начала (включительно, по умолчанию 0)
  • stop — индекс конца (не включительно)
  • step — шаг (по умолчанию 1, может быть отрицательным для обратного обхода)

Примеры:

1D массив:

import numpy as np
 
a = np.array([10, 20, 30, 40, 50])
 
print(a[1:4])   # [20 30 40] — элементы с индексами 1,2,3
print(a[:3])    # [10 20 30] — от начала до 3 (не включая)
print(a[::2])   # [10 30 50] — каждый второй элемент
print(a[::-1])  # [50 40 30 20 10] — массив в обратном порядке

2D массив (матрица):

M = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
 
print(M[0:2, 1:3])  # [[2 3]
                     #  [5 6]] — верхний левый блок 2x2
print(M[:, 1])      # [2 5 8] — все строки, столбец 1
print(M[1, :])      # [4 5 6] — строка 1, все столбцы
print(M[::-1, ::-1])# [[9 8 7]
                     #  [6 5 4]
                     #  [3 2 1]] — перевернутая матрица

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

  • Срезы возвращают view, а не копию массива (изменение среза изменяет исходный массив)
  • Можно комбинировать с broadcasting и fancy indexing
  • Поддерживается отрицательный шаг для обратного обхода элементов

Срезы — это основной инструмент выбора подмассивов, эффективный и удобный для работы с nD массивами.