Учебники

NumPy — индексирование и нарезка

Содержимое объекта ndarray может быть доступно и изменено путем индексации или нарезки, как и встроенные в Python контейнерные объекты.

Как упоминалось ранее, элементы в объекте ndarray следуют за индексом, начинающимся с нуля. Доступны три типа методов индексации — доступ к полям, базовое разделение и расширенное индексирование .

Базовая нарезка является расширением базовой концепции Python нарезки до n измерений. Объект среза Python создается путем предоставления параметров start, stop и step встроенной функции среза . Этот объект слайса передается в массив для извлечения части массива.

Пример 1

Live Demo

import numpy as np 
a = np.arange(10) 
s = slice(2,7,2) 
print a[s]

Его вывод выглядит следующим образом —

[2  4  6]

В приведенном выше примере объект ndarray подготавливается функцией arange () . Затем определяется объект среза со значениями start, stop и step 2, 7 и 2 соответственно. Когда этот объект слайса передается ndarray, часть его, начиная с индекса 2 до 7 с шагом 2, разрезается.

Тот же результат можно получить, передав параметры среза, разделенные двоеточием: (start: stop: step), непосредственно объекту ndarray .

Пример 2

Live Demo

import numpy as np 
a = np.arange(10) 
b = a[2:7:2] 
print b

Здесь мы получим тот же результат —

[2  4  6]

Если указан только один параметр, будет возвращен один элемент, соответствующий индексу. Если перед ним вставлен знак:, будут извлечены все элементы этого индекса. Если используются два параметра (с: между ними), элементы между двумя индексами (не включая стоп-индекс) с первым шагом по умолчанию нарезаются.

Пример 3

Live Demo

# slice single item 
import numpy as np 

a = np.arange(10) 
b = a[5] 
print b

Его вывод выглядит следующим образом —

5

Пример 4

Live Demo

# slice items starting from index 
import numpy as np 
a = np.arange(10) 
print a[2:]

Теперь результат будет —

[2  3  4  5  6  7  8  9]

Пример 5

Live Demo

# slice items between indexes 
import numpy as np 
a = np.arange(10) 
print a[2:5]

Здесь результат будет —

[2  3  4] 

Вышеприведенное описание относится и к многомерному ndarray .

Пример 6

Live Demo

import numpy as np 
a = np.array([[1,2,3],[3,4,5],[4,5,6]]) 
print a  

# slice items starting from index
print 'Now we will slice the array from the index a[1:]' 
print a[1:]

Выход выглядит следующим образом —

[[1 2 3]
 [3 4 5]
 [4 5 6]]

Now we will slice the array from the index a[1:]
[[3 4 5]
 [4 5 6]]

Срез также может включать многоточие (…), чтобы сделать кортеж выделения той же длины, что и размерность массива. Если многоточие используется в позиции строки, он вернет ndarray, состоящий из элементов в строках.

Пример 7

Live Demo

# array to begin with 
import numpy as np 
a = np.array([[1,2,3],[3,4,5],[4,5,6]]) 

print 'Our array is:' 
print a 
print '\n'  

# this returns array of items in the second column 
print 'The items in the second column are:'  
print a[...,1] 
print '\n'  

# Now we will slice all items from the second row 
print 'The items in the second row are:' 
print a[1,...] 
print '\n'  

# Now we will slice all items from column 1 onwards 
print 'The items column 1 onwards are:' 
print a[...,1:]

Результат этой программы следующий: