Индексация и срезы в NumPy

Индексация и срезы в библиотеке NumPy

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

Основы индексации

Как и в стандартных списках Python, индексация в NumPy начинается с 0.

Одномерные массивы:

import numpy as np

a = np.array([0, 1, 2, 3, 4])
print(a[0])  # 0
print(a[-1]) # 4

Многомерные массивы:

import numpy as np

b = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(b[1, 2])  # 6 (вторая строка, третий столбец)

Срезы и подмассивы

Срезы позволяют получать подмассивы, используя синтаксис [start:stop:step].

Одномерные массивы:

import numpy as np

a = np.array([0, 1, 2, 3, 4, 5])
print(a[1:4])     # [1 2 3]
print(a[:3])      # [0 1 2]
print(a[2:])      # [2 3 4 5]
print(a[::2])     # [0 2 4]

Многомерные массивы:

import numpy as np

b = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
print(b[:2, 1:3]) 

#[[2 3]
# [6 7]]

Стоит заметить, что при такой индексации создается представление исходного массива, а не новый массив. То есть, изменяя элементы подмассива, вы изменяете и исходный массив.

Булева индексация

Булева индексация позволяет выбирать элементы массива на основе условий.

import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(a[a > 3])   # [4 5]

Если нужно применить несколько условий, используйте операторы & (и) и | (или).

import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(a[(a > 2) & (a < 5)])  # [3 4]

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

import numpy as np

a = np.array([1, 2, 3, 4, 5])
a[a > 3] = 99
print(a)  # [ 1  2  3 99 99]

Заключение

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

Содержание: