NumPy: массивы, форма и индексация

Базовая индексация: элементы, строки, столбцы и срезы

Содержание курса

Выбор целой строки и столбца в 2D-массиве

Когда нужен не один элемент, а целая строка или столбец, в игру вступает двоеточие : — символ, который означает «все индексы по этой оси».

Возьмём массив shape (3, 4):

import numpy as np

arr = np.arange(12).reshape(3, 4)
# [[ 0,  1,  2,  3],
#  [ 4,  5,  6,  7],
#  [ 8,  9, 10, 11]]

Чтобы взять вторую строку (индекс 1), можно написать двумя эквивалентными способами:

print(arr[1])     # [4, 5, 6, 7]  — shape (4,)
print(arr[1, :])  # [4, 5, 6, 7]  — shape (4,)

arr[1] — сокращённая запись; NumPy автоматически дополняет недостающие оси полными срезами. arr[1, :] делает то же самое явно: берём строку 1, а по столбцам — всё подряд.

Чтобы взять третий столбец (индекс 2), двоеточие ставится на место строкового индекса:

print(arr[:, 2])  # [ 2,  6, 10]  — shape (3,)

Здесь : по первой оси означает «все строки», а 2 по второй фиксирует конкретный столбец.

Что происходит с shape. Результат в обоих случаях — одномерный массив, а не двумерный. Механизм простой: целый индекс убирает ту ось, по которой он задан.

  • arr[1, :] — ось строк схлопнулась из-за 1, ось столбцов сохранилась полностью → shape (4,).
  • arr[:, 2] — ось строк сохранилась полностью, ось столбцов схлопнулась из-за 2 → shape (3,).

Проверить это можно прямо в коде:

row = arr[1]
col = arr[:, 2]

print(row.shape)  # (4,)
print(col.shape)  # (3,)

Одномерный массив — это не скаляр и не строка-матрица. Его можно складывать, умножать, передавать в функции — и при этом shape чётко говорит, сколько в нём элементов и вдоль какой логической оси они лежат.

Отрицательные индексы работают так же, как при точечном доступе: arr[-1] даёт последнюю строку, arr[:, -1] — последний столбец.

print(arr[-1])    # [ 8,  9, 10, 11]  — shape (4,)
print(arr[:, -1]) # [ 3,  7, 11]      — shape (3,)

Это часто используют, когда нужно быстро взять крайние строки или столбцы, не зная заранее размеров массива.

Начать заново?

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

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.