web analytics

Los fundamentos de las matrices NumPy | Numpy Arrays - Guía 2021

matrices numpy

Los fundamentos de los Numpy Arrays

La manipulación de datos en Python es casi sinónimo de la manipulación de matrices NumPy: incluso las herramientas más nuevas como Pandas se construyen alrededor de la matriz NumPy. Esta sección presentará varios ejemplos del uso de la manipulación de matrices NumPy para acceder a datos y submatrices, y para dividir, remodelar y unir matrices. Si bien los tipos de operaciones que se muestran aquí pueden parecer un poco áridos y pedantes, comprenden los componentes básicos de muchos otros ejemplos utilizados a lo largo del libro. ¡Conócelos bien!

La ciencia de datos como una profesión

Cubriremos algunas categorías de manipulaciones básicas de matrices aquí:

  • Atributos de las matrices: determinación del tamaño, la forma, el consumo de memoria y los tipos de datos de las matrices.
  • Indexación de matrices: obtención y configuración del valor de elementos de matriz individuales.
  • Corte de matrices: obtención y configuración de submatrices más pequeñas dentro de una matriz más grande.
  • Remodelación de matrices: Cambiar la forma de una matriz dada.
  • Unir y dividir matrices: combinar varias matrices en una y dividir una matriz en muchas.
Índice
  1. Atributos de matrices de NumPy
  2. Indexación de matrices numpy: acceso a elementos individuales
  3. Slicing de matrices: acceso a submatrices
  4. Subarreglos unidimensionales
  5. Subarreglos multidimensionales
    1. Acceder a filas y columnas de matriz
    2. Subarreglos como vistas sin copia
  6. Creando copias de matrices numpy
  7. Cambiando el tamaño de las matrices numpy
  8. Concatenación y separación de matrices numpy
    1. Concatenación de matrices numpy
    2. Separación de matrices numpy

Atributos de matrices de NumPy

Primero, analicemos algunos atributos útiles de la matriz. Comenzaremos definiendo tres matrices aleatorias, una matriz unidimensional, bidimensional y tridimensional. Usaremos el generador de números aleatorios de NumPy, que sembraremos con un valor establecido para garantizar que se generen las mismas matrices aleatorias cada vez que se ejecute este código.

3c0LEQAAAAAElFTkSuQmCC

Cada matriz tiene atributos ndim (el número de dimensiones), shape (el tamaño de cada dimensión) y size (el tamaño total de la matriz):

wAAAABJRU5ErkJggg==

Otros atributos incluyen itemize, que enumera el tamaño (en bytes) de cada elemento de la matriz, y nbytes, que enumera el tamaño total (en bytes) de la matriz:

t0wBFodDPQAAAABJRU5ErkJggg==

Indexación de matrices numpy: acceso a elementos individuales

Si está familiarizado con la indexación de listas estándar de Python, la indexación en NumPy le resultará bastante familiar. En una matriz unidimensional, se puede acceder al i-ésimo valor (contando desde cero) especificando el índice deseado entre corchetes, al igual que con las listas de Python:

AdZyFSrtj9owAAAAAElFTkSuQmCC

Para indexar desde el final de la matriz, puede usar índices negativos:

En una matriz multidimensional, se puede acceder a los elementos mediante una tupla de índices separados por comas:

Los valores también se pueden modificar utilizando cualquiera de las notación de índice anterior:

BjBTCMtJcDz09LEElbbCagTOW0nRXwQgAAEIAABCFhFAJFjVbpwFgIQgECDCFDhalAycCWNwP8BpEfOQbtJ9uIAAAAASUVORK5CYII=

Slicing de matrices: acceso a submatrices

Así como podemos usar corchetes para acceder a elementos individuales de la matriz, también podemos usarlos para acceder a submatrices con la notación de sector, marcada por el carácter de dos puntos (:). La sintaxis de corte de NumPy sigue la de la lista estándar de Python; para acceder a una porción de una matriz x, use esto:

gfKb2WbJNbH1gAAAABJRU5ErkJggg==

Si alguno de estos no está especificado, por defecto toman los valores start = 0, stop = size of dimension, step = 1. Veremos cómo acceder a submatrices en una dimensión y en múltiples dimensiones.

Subarreglos unidimensionales

Subarreglos multidimensionales

Los sectores multidimensionales funcionan de la misma manera, con varios sectores separados por comas. Por ejemplo:

vQAAAAASUVORK5CYII=

Acceder a filas y columnas de matriz

Una rutina comúnmente necesaria es acceder a filas o columnas individuales de una matriz. Esto se puede hacer combinando indexación y segmentación, utilizando una división vacía marcada con dos puntos (:):

7vS+TaCOcgsAAAAASUVORK5CYII=

Subarreglos como vistas sin copia

Una cosa importante, y extremadamente útil, que debe saber sobre los segmentos de matriz es que devuelven vistas en lugar de copias de los datos de la matriz. Esta es un área en la que la división de matrices de NumPy difiere de la división de listas de Python: en las listas, las secciones serán copias. Considere nuestra matriz bidimensional de antes:

Ahora, si modificamos este subarreglo, veremos que se cambia el arreglo original. Observar:

Este comportamiento predeterminado es bastante útil: significa que cuando trabajamos con grandes conjuntos de datos, podemos acceder y procesar partes de estos conjuntos de datos sin la necesidad de copiar el búfer de datos subyacente.

Creando copias de matrices numpy

A pesar de las características agradables de las vistas de matriz, a veces es útil copiar explícitamente los datos dentro de una matriz o submatriz. Esto se puede hacer más fácilmente con el método copy ():

B37P62vQwwfQAAAAAElFTkSuQmCC

Si ahora modificamos este subarreglo, el arreglo original no se toca

bk6AggggAACCOQs8P+w1fCW1O3RtQAAAABJRU5ErkJggg==

Cambiando el tamaño de las matrices numpy

Otro tipo útil de operación es la remodelación de matrices. La forma más flexible de hacer esto es con el método de remodelación. Por ejemplo, si desea colocar los números del 1 al 9 en una cuadrícula de 3 × 3, puede hacer lo siguiente:

Tenga en cuenta que para que esto funcione, el tamaño de la matriz inicial debe coincidir con el tamaño de la matriz reformada. Cuando sea posible, el método de remodelación utilizará una vista sin copia de la matriz inicial, pero con búferes de memoria no contiguos este no es siempre el caso.

Otro patrón de remodelación común es la conversión de una matriz unidimensional en una matriz de fila o columna bidimensional. Esto se puede hacer con el método reshape o más fácilmente haciendo uso de la palabra clave newaxis dentro de una operación de slicing:

H9IYwOs2sIpFQAAAABJRU5ErkJggg==

Concatenación y separación de matrices numpy

Todas las rutinas anteriores funcionaron en matrices únicas. También es posible combinar varias matrices en una y, a la inversa, dividir una sola matriz en varias matrices. Echaremos un vistazo a esas operaciones aquí.

Concatenación de matrices numpy

La concatenación o unión de dos matrices en NumPy se logra principalmente mediante las rutinas np.concatenate, np.vstack y np.hstack. np.concatenate toma una tupla o lista de matrices como su primer argumento, como podemos ver aquí:

0+51R3QIfrKAAAAAElFTkSuQmCC

Separación de matrices numpy

Lo opuesto a la concatenación es la división, que se implementa mediante las funciones np.split, np.hsplit y np.vsplit. Para cada uno de estos, podemos pasar una lista de índices con los puntos de división:

Q4AABEaQAAJoBI1GlyEAAQhAAAJdJ1D1DzsEUNdnEOMbIlD1QwVyCEBg9AjwvTB6NivbYwRQWYLcDwEIZBJgcclERAEIQKBmAv8PZmCAqiGVh+cAAAAASUVORK5CYII=

Observe que N puntos de división conduce a N + 1 subarreglos. Las funciones relacionadas np.hsplit y np.vsplit son similares:

De manera similar, np.dsplit dividirá las matrices a lo largo del tercer eje.

Te puede interesar:  Cómo crear un keylogger usando Python

Deja una respuesta

Subir