Содержимое объекта ndarray может быть доступно и изменено путем индексации или нарезки, как и встроенные в Python контейнерные объекты.
Как упоминалось ранее, элементы в объекте ndarray следуют за индексом, начинающимся с нуля. Доступны три типа методов индексации — доступ к полям, базовое разделение и расширенное индексирование .
Базовая нарезка является расширением базовой концепции Python нарезки до n измерений. Объект среза Python создается путем предоставления параметров start, stop и step встроенной функции среза . Этот объект слайса передается в массив для извлечения части массива.
Пример 1
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
import numpy as np a = np.arange(10) b = a[2:7:2] print b
Здесь мы получим тот же результат —
[2 4 6]
Если указан только один параметр, будет возвращен один элемент, соответствующий индексу. Если перед ним вставлен знак:, будут извлечены все элементы этого индекса. Если используются два параметра (с: между ними), элементы между двумя индексами (не включая стоп-индекс) с первым шагом по умолчанию нарезаются.
Пример 3
# slice single item import numpy as np a = np.arange(10) b = a[5] print b
Его вывод выглядит следующим образом —
5
Пример 4
# 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
# slice items between indexes import numpy as np a = np.arange(10) print a[2:5]
Здесь результат будет —
[2 3 4]
Вышеприведенное описание относится и к многомерному ndarray .
Пример 6
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
# 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:]
Результат этой программы следующий: