Нарезать 2D-массив в NumPy

  1. Разделите 2D-массив с помощью индексирования массива в NumPy
  2. Разделите 2D-массив с помощью функции numpy.ix_() в NumPy

Из этого туториала Вы узнаете, как нарезать 2D-массив в NumPy.

Разделите 2D-массив с помощью индексирования массива в NumPy

Если у нас есть основной 2D-массив NumPy и мы хотим извлечь из него еще один 2D-под-массив, мы можем использовать для этой цели метод индексации массива. В качестве примера возьмем массив формы 4*4. Извлечь первый и последний элементы массива довольно просто. Например, array[0:2,0:2] даст нам представление или подмассив, который содержит первые два элемента внутри массива как по вертикали, так и по горизонтали. Точно так же array[2:,2:] даст нам представление или подмассив, который содержит два последних элемента внутри массива как по вертикали, так и по горизонтали. Более сложная задача - получить элементы из разных строк и столбцов, пропуская среднюю строку или столбец. В следующем примере кода показано, как именно этого добиться с помощью индексации массивов в Python.

import numpy as np

x = range(16)

x = np.reshape(x,(4,4))
print(x)

y = x[[[0],[2]],[1,3]]
print(y)

Выход:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

В приведенном выше коде мы извлекли элементы в строках 1 и 3, которые пересекаются со столбцами 1 и 3, пропуская строку 2 и столбец 2 с помощью метода индексации массива в Python. Это также можно сделать с помощью аналогичного подхода, но с другим синтаксисом, как показано в примере кодирования ниже.

import numpy as np

x = range(16)

x = np.reshape(x,(4,4))
print(x)

y = x[0::2, 1::2]
print(y)

Выход:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

В приведенном выше коде мы также извлекли элементы в строках 1 и 3, которые пересекаются со столбцами 1 и 3, пропуская строку 2 и столбец 2 с помощью метода индексации массива в Python. Этот метод проще, чем предыдущий, поскольку он не требует слишком большого количества скобок и в целом более удобочитаем.

Разделите 2D-массив с помощью функции numpy.ix_() в NumPy

Функция numpy.ix_() формирует последовательность элементов в форме открытой сетки в Python. Эта функция принимает n одномерных массивов и возвращает nD-массив. Мы можем использовать эту функцию для извлечения отдельных одномерных срезов из нашего основного массива, а затем объединить их для формирования двухмерного массива. Следующий пример кода выполняет ту же работу, что и предыдущие примеры, но с использованием функции numpy.ix_() с индексированием массива в Python.

import numpy as np

x = range(16)

x = np.reshape(x,(4,4))
print(x)

y = x[np.ix_([0,2],[1,3])]
print(y)

Выход:

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[[ 1  3]
 [ 9 11]]

В приведенном выше коде мы в основном проделали то же самое, что и в предыдущих примерах, но с помощью функции np.ix_() вместе с индексированием массивов в Python.

Основная идея всех этих примеров одна и та же. Когда мы создавали наш основной массив, ему был выделен буфер в зависимости от его формы и размера. Метод индексации массива создает новый объект типа данных массива, который указывает на буфер памяти нашего основного массива. Во всех приведенных выше примерах, хотя y - новый массив, он не занимает никакого буфера в памяти. Он указывает только на определенные места в буфере памяти массива x. Это то, что делает метод индексации массива лучше, чем просто создание нового массива.