NumPy - индексирование и нарезка
Доступ к содержимому объекта ndarray и его изменение можно получить путем индексации или нарезки, как и для встроенных объектов контейнера Python.
Как упоминалось ранее, элементы в объекте ndarray следует за индексом, начинающимся с нуля. Доступны три типа методов индексации -field access, basic slicing и advanced indexing.
Базовая нарезка - это расширение базовой концепции Python о нарезке на n измерений. Объект фрагмента Python создается путем предоставленияstart, stop, и step параметры к встроенному sliceфункция. Этот объект среза передается в массив для извлечения части массива.
Пример 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:]
Результат этой программы следующий -
Our array is:
[[1 2 3]
[3 4 5]
[4 5 6]]
The items in the second column are:
[2 4 5]
The items in the second row are:
[3 4 5]
The items column 1 onwards are:
[[2 3]
[4 5]
[5 6]]