Python Academy · Урок

Индексация, срезы и расширенная индексация

Получайте доступ к элементам массивов и изменяйте их с помощью продвинутых методов индексации.

Урок 3 из 413 шагов

«Индексация, срезы и расширенная индексация» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Базовая индексация

Получайте доступ к элементам с помощью целочисленных индексов, начинающихся с нуля. Отрицательные индексы отсчитываются с конца. Для многомерных массивов используются индексы, разделённые запятыми.

import numpy as np

arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr[0, 2])    # 3
print(arr[-1, -1])  # 9
print(arr[1])       # [4 5 6]

Срезы

Синтаксис среза start:stop:step возвращает представление. Он применяется независимо к каждому измерению.

import numpy as np

m = np.arange(16).reshape(4,4)
print(m[1:3, 1:3])
# [[5 6]
#  [9 10]]
print(m[::2, ::2])   # every other row and column

Логическая индексация (маскирование)

Передайте логический массив той же формы, чтобы выбрать элементы, для которых значение равно True.

import numpy as np

arr = np.array([1, -2, 3, -4, 5])
mask = arr > 0
print(mask)         # [ True False  True False  True]
print(arr[mask])    # [1 3 5]
arr[~mask] = 0      # set negatives to 0
print(arr)          # [1 0 3 0 5]

Расширенная индексация целочисленными массивами

Передайте массив целочисленных индексов, чтобы выбрать несколько определённых элементов.

import numpy as np

arr = np.array([10, 20, 30, 40, 50])
idx = np.array([0, 2, 4])
print(arr[idx])   # [10 30 50]

# 2-D fancy indexing:
m = np.arange(9).reshape(3,3)
print(m[[0,2], [0,2]])   # [m[0,0], m[2,2]] = [0, 8]

np.where для выбора по индексам

np.where(condition) с одним аргументом возвращает индексы, для которых условие равно True.

import numpy as np

arr = np.array([5, 2, 8, 1, 9])
idx = np.where(arr > 4)[0]
print(idx)         # [0 2 4]
print(arr[idx])    # [5 8 9]

np.take и np.put

np.take(arr, indices) выбирает элементы (поддерживает плоскую индексацию). np.put(arr, indices, values) вставляет значения.

import numpy as np

arr = np.array([10, 20, 30, 40])
print(np.take(arr, [1, 3]))   # [20 40]

np.put(arr, [0, 2], [99, 88])
print(arr)   # [99 20 88 40]

np.nonzero

np.nonzero(arr) возвращает кортеж массивов — по одному на измерение — с индексами ненулевых элементов.

import numpy as np

arr = np.array([[0,1,0],[2,0,3]])
rows, cols = np.nonzero(arr)
print(rows, cols)   # [0 1 1] [1 0 2]

Индексация с многоточием

... (многоточие) разворачивается в необходимое количество :, чтобы охватить оставшиеся измерения.

import numpy as np

arr = np.ones((2,3,4,5))
print(arr[0, ..., 2].shape)   # (3, 4) — first dim=0, last dim=2
print(arr[..., 0].shape)      # (2, 3, 4) — last dim=0

np.ix_ для внешней индексации

np.ix_ создаёт открытую сетку из нескольких одномерных последовательностей для расширенной индексации в стиле внешнего произведения.

import numpy as np

m = np.arange(25).reshape(5,5)
rows = [0, 2, 4]
cols = [1, 3]
print(m[np.ix_(rows, cols)])
# [[ 1  3]
#  [11 13]
#  [21 23]]

Присваивание при расширенной индексации

Вы можете присваивать значения выбранным элементам с расширенной индексацией непосредственно в исходном массиве.

import numpy as np

arr = np.zeros(5)
arr[[1, 3]] = [10, 20]
print(arr)   # [ 0. 10.  0. 20.  0.]

# Broadcast a scalar:
arr[[0, 2, 4]] = 99
print(arr)   # [99. 10. 99. 20. 99.]

Разница между представлением и копией при индексации

Базовая индексация и индексация срезами → представление (изменения затрагивают исходный массив). Расширенная и логическая индексация → копия (изменения НЕ затрагивают исходный массив).

import numpy as np

arr = np.arange(5)
view = arr[1:4]   # view
view[0] = 99
print(arr)         # [0 99 2 3 4]

copy = arr[[1,2,3]]   # fancy → copy
copy[0] = 0
print(arr)         # unchanged

Быстрая проверка

Логическая и расширенная индексация возвращают представление или копию?

Итоги

Используйте [row, col] для отдельных элементов, start:stop:step для срезов (представлений), логические массивы для маскирования (копий) и целочисленные массивы для расширенной индексации (копий). Используйте np.where, чтобы получить индексы, а np.ix_ — для внешних сеток.

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
76
Уроки
320

Часто задаваемые вопросы

Урок «Индексация, срезы и расширенная индексация» бесплатный?

Да — полный текст урока «Индексация, срезы и расширенная индексация» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Индексация, срезы и расширенная индексация»?

Получайте доступ к элементам массивов и изменяйте их с помощью продвинутых методов индексации. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Индексация, срезы и расширенная индексация»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Массивы NumPy и dtypes
  2. Операции над массивами и broadcasting
  3. Индексация, срезы и расширенная индексация
  4. Линейная алгебра с NumPy
← Назад к Python Academy