Cortar matriz 2D en NumPy

Muhammad Maisam Abbas 30 enero 2023
  1. Cortar matriz 2D con indexación de array en NumPy
  2. Slice 2D Array con la función numpy.ix_() en NumPy
Cortar matriz 2D en NumPy

Este tutorial presentará cómo cortar un array 2D en NumPy.

Cortar matriz 2D con indexación de array en NumPy

Si tenemos un array 2D NumPy principal y queremos extraer otra submatriz 2D de ella, podemos usar el método de indexación de matrices para este propósito. Tomemos un array de forma 4*4 para este ejemplo. Es bastante sencillo extraer el primer y último elemento del array. Por ejemplo, array[0:2,0:2] nos dará una vista o subarray que contiene los dos primeros elementos dentro del array tanto vertical como horizontalmente. De manera similar, array[2:,2:] nos dará una vista o subarray que contiene los dos últimos elementos dentro del array tanto vertical como horizontalmente. El trabajo más complejo es obtener los elementos de diferentes filas y columnas omitiendo una fila o columna del medio. El siguiente ejemplo de código nos muestra exactamente cómo lograr esto con la indexación de matrices en Python.

import numpy as np

x = range(16)

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

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

Producción :

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

En el código anterior, extrajimos los elementos en las filas 1 y 3 que se cruzan con las columnas 1 y 3 mientras omitimos la fila 2 y la columna 2 con el método de indexación de array en Python. Esto también se puede hacer con un enfoque similar pero con una sintaxis diferente, como se muestra en el ejemplo de codificación a continuación.

import numpy as np

x = range(16)

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

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

Producción :

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

En el código anterior, también extrajimos los elementos en las filas 1 y 3 que se cruzan con las columnas 1 y 3 mientras omitimos la fila 2 y la columna 2 con el método de indexación de array en Python. Este método es más fácil que el enfoque anterior porque no implica demasiados corchetes y, en general, es más legible.

Slice 2D Array con la función numpy.ix_() en NumPy

La función numpy.ix_() forma una secuencia de elementos en forma de malla abierta en Python. Esta función toma matrices 1D n y devuelve un array nD. Podemos usar esta función para extraer cortes 1D individuales de nuestra matriz principal y luego combinarlos para formar un array 2D. El siguiente ejemplo de código hace el mismo trabajo que los ejemplos anteriores pero usando la función numpy.ix_() con indexación de array en 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)

Producción :

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

En el código anterior, básicamente hicimos exactamente lo mismo que en los ejemplos anteriores pero usando la función np.ix_() junto con la indexación de matrices en Python.

La idea principal detrás de todos estos ejemplos es la misma. Cuando creamos nuestra matriz principal, se le asignó un búfer en función de su forma y tamaño. El método de indexación de matrices crea un nuevo objeto de tipo de datos de array que apunta al búfer de memoria de nuestra matriz principal. En todos los ejemplos anteriores, aunque y es una nueva matriz, no ocupa ningún búfer en la memoria. Solo apunta a ciertas ubicaciones en el búfer de memoria del array x. Esto es lo que hace que el método de indexación de matrices sea mejor que simplemente crear una nueva matriz.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn