Las matrices NumPy proporcionan una forma rápida y eficiente de almacenar y manipular datos en Python.
Son particularmente útiles para representar datos como vectores y matrices en el aprendizaje por máquina.
Se puede acceder directamente a los datos de las matrices NumPy mediante índices de columnas y filas, y esto es razonablemente sencillo. Sin embargo, a veces debemos realizar operaciones en las matrices de datos como la suma o la media de los valores por fila o columna y esto requiere que se especifique el eje de la operación.
Desafortunadamente, las operaciones de columna y fila en las matrices de NumPy no coinciden con nuestras intuiciones obtenidas de la indexación de filas y columnas, y esto puede causar confusión tanto a los principiantes como a los experimentados practicantes de aprendizaje de máquinas. Específicamente, operaciones como la suma pueden ser realizadas por columna usando axis=0 y a nivel de fila usando axis=1.
En este tutorial, descubrirá cómo acceder y operar en las matrices de NumPy por fila y por columna.
Después de completar este tutorial, lo sabrás:
- Cómo definir matrices NumPy con filas y columnas de datos.
- Cómo acceder a los valores de las matrices de NumPy por índices de filas y columnas.
- Cómo realizar operaciones en matrices NumPy por eje de filas y columnas.
Empecemos.
Resumen del Tutorial
Este tutorial está dividido en tres partes; son:
- Matriz de números con filas y columnas
- Filas y columnas de datos en matrices NumPy
- Operaciones de la matriz NumPy por fila y columna
- Axis= Operación sin conjunto de cables
- Eje=0 Operación de columna
- Eje=1 Operación de fila
Matriz de números con filas y columnas
Antes de sumergirnos en el eje de la matriz NumPy, refresquemos nuestro conocimiento de las matrices NumPy.
Típicamente en Python, trabajamos con listas de números o listas de listas de números. Por ejemplo, podemos definir una matriz bidimensional de dos filas de tres números como una lista de números de la siguiente manera:
... # Definir los datos como una lista datos = [[[[1,2,3], [[4,5,6]] |
Una matriz NumPy nos permite definir y operar sobre vectores y matrices de números de una manera eficiente, por ejemplo, mucho más eficiente que las simples listas Python. Las matrices NumPy se llaman NDArrays y pueden tener virtualmente cualquier número de dimensiones, aunque, en el aprendizaje por máquina, lo más común es que trabajemos con matrices 1D y 2D (o matrices 3D para imágenes).
Por ejemplo, podemos convertir nuestra matriz de listas en una matriz NumPy mediante la función asarray():
... # Convertir a una matriz numérica datos = asarray(datos) |
Podemos imprimir la matriz directamente y esperar ver dos filas de números, donde cada fila tiene tres números o columnas.
... # Resumir el contenido de la matriz imprimir(datos) |
Podemos resumir la dimensionalidad de un conjunto imprimiendo el «forma«que es una tupla, donde el número de valores en la tupla define el número de dimensiones, y el número entero en cada posición define el tamaño de la dimensión.
Por ejemplo, esperamos que la forma de nuestra matriz sea (2,3) para dos filas y tres columnas.
... # Resumir la forma de la matriz imprimir(datos.forma) |
A continuación se muestra un ejemplo completo de esto.
# Crear y resumir una matriz numérica de numpy importación asarray # Definir los datos como una lista datos = [[[[1,2,3], [[4,5,6]] # Convertir a una matriz numérica datos = asarray(datos) # Resumir el contenido de la matriz imprimir(datos) # Resumir la forma de la matriz imprimir(datos.forma) |
Ejecutando el ejemplo se definen nuestros datos como una lista de listas, se convierte en una matriz NumPy, y luego se imprimen los datos y la forma.
Podemos ver que cuando la matriz se imprime, tiene la forma esperada de dos filas con tres columnas. Podemos ver entonces que la forma impresa coincide con nuestras expectativas.
Para más información sobre los fundamentos de las matrices de NumPy, vea el tutorial:
Hasta ahora, todo bien.
¿Pero cómo accedemos a los datos de la matriz por fila o columna? Y lo que es más importante, ¿cómo podemos realizar operaciones en la matriz por fila o por columna?
Veamos más de cerca estas preguntas.
Filas y columnas de datos en matrices NumPy
El «formaLa propiedad «resume la dimensionalidad de nuestros datos».
Es importante que la primera dimensión defina el número de filas y la segunda el número de columnas. Por ejemplo (2,3) define una matriz con dos filas y tres columnas, como vimos en la última sección.
Podemos enumerar cada fila de datos de una matriz enumerando desde el índice 0 hasta la primera dimensión de la forma de la matriz, por ejemplo, la forma[0]. Podemos acceder a los datos de la matriz a través del índice de filas y columnas.
Por ejemplo, los datos[0, 0] es el valor de la primera fila y la primera columna, mientras que los datos[0, :] son los valores de la primera fila y todas las columnas, por ejemplo, la primera fila completa de nuestra matriz.
En el ejemplo que figura a continuación se enumeran todas las filas de los datos y se imprime cada una de ellas por turno.
# Enumerar las filas en una matriz numérica de numpy importación asarray # Definir los datos como una lista datos = [[[[1,2,3], [[4,5,6]] # Convertir a una matriz numérica datos = asarray(datos) # Paso a través de las filas para fila en rango(datos.forma[[0]): imprimir(datos[[fila, :]) |
Como era de esperar, los resultados muestran la primera fila de datos, luego la segunda fila de datos.
Podemos lograr el mismo efecto para las columnas.
Es decir, podemos enumerar los datos por columnas. Por ejemplo, los datos[:, 0] accede a todas las filas de la primera columna. Podemos enumerar todas las columnas desde la columna 0 hasta la columna final definida por la segunda dimensión del «forma» propiedad, por ejemplo, la forma[1].
El siguiente ejemplo lo demuestra enumerando todas las columnas de nuestra matriz.
# Enumerar las columnas en una matriz numérica de numpy importación asarray # Definir los datos como una lista datos = [[[[1,2,3], [[4,5,6]] # Convertir a una matriz numérica datos = asarray(datos) # paso a través de las columnas para col en rango(datos.forma[[1]): imprimir(datos[[:, col]) |
Ejecutando el ejemplo se enumera e imprime cada columna de la matriz.
Dado que la matriz tiene tres columnas, podemos ver que el resultado es que imprimimos tres columnas, cada una como un vector unidimensional. Es decir, la columna 1 (índice 0) que tiene los valores 1 y 4, la columna 2 (índice 1) que tiene los valores 2 y 5, y la columna 3 (índice 2) que tiene los valores 3 y 6.
Es gracioso porque nuestras columnas no parecen columnas; están giradas de lado, en lugar de verticales.
Ahora sabemos cómo acceder a los datos en una matriz numérica por columna y por fila.
Hasta ahora, todo bien, pero ¿qué hay de las operaciones en la matriz por columna y matriz? Eso es lo siguiente.
Operaciones de la matriz NumPy por fila y columna
A menudo necesitamos realizar operaciones en matrices NumPy por columna o por fila.
Por ejemplo, tal vez necesitemos sumar valores o calcular una media para una matriz de datos por fila o por columna.
Esto puede lograrse utilizando el sum() o significa() La función NumPy y la especificación de la función «eje«para realizar la operación.
Podemos especificar el eje como la dimensión a través de la cual se va a realizar la operación, y esta dimensión no coincide con nuestra intuición basada en cómo interpretamos el «forma«…de la matriz y cómo indexamos los datos en la matriz.
Como tal, esto causa la máxima confusión para los principiantes.
Eso es, axis=0 realizará la operación a nivel de columna y eje=1 realizará la operación en fila. También podemos especificar el eje como Ninguno, que realizará la operación para todo el conjunto.
En resumen:
- axis=Ninguno: Aplicar la operación en cuanto a la matriz.
- axis=0: Aplicar la operación por columnas, en todas las filas de cada columna.
- eje=1: Aplicar la operación en forma de fila, a través de todas las columnas de cada fila.
Hagamos esto concreto con un ejemplo trabajado.
Sumaremos los valores de nuestra matriz por cada uno de los tres ejes.
Axis= Operación sin conjunto de cables
El ajuste de la axis=Ninguno cuando se realiza una operación en una matriz NumPy se realiza la operación para toda la matriz.
Esto es a menudo el defecto para la mayoría de las operaciones, como la suma, la media, std, y así sucesivamente.
... # Suma de datos por matriz resultado = datos.suma(eje=Ninguno) |
El siguiente ejemplo demuestra la suma de todos los valores de un conjunto, por ejemplo, una operación de conjunto.
# Suma de valores en forma de matriz de numpy importación asarray # Definir los datos como una lista datos = [[[[1,2,3], [[4,5,6]] # Convertir a una matriz numérica datos = asarray(datos) # Resumir el contenido de la matriz imprimir(datos) # Suma de datos por matriz resultado = datos.suma(eje=Ninguno) # resumir el resultado imprimir(resultado) |
Ejecutando el ejemplo primero se imprime la matriz, luego se realiza la operación de suma de la matriz e imprime el resultado.
Podemos ver que la matriz tiene seis valores que sumarían 21 si los sumamos manualmente y que el resultado de la operación de suma realizada en la matriz coincide con esta expectativa.
Eje=0 Operación de columna
El ajuste de la axis=0 cuando se realiza una operación en una matriz NumPy, se realiza la operación por columnas, es decir, a través de todas las filas de cada columna.
... # Suma de datos por columna resultado = datos.suma(eje=0) |
Por ejemplo, dados nuestros datos con dos filas y tres columnas:
Datos = [[1, 2, 3], 4, 5, 6]] |
Esperamos que una suma en forma de columna con eje=0 resulte en tres valores, uno para cada columna, como sigue:
- Columna 1: 1 + 4 = 5
- Columna 2: 2 + 5 = 7
- Columna 3: 3 + 6 = 9
El ejemplo que se presenta a continuación muestra la suma de valores en el conjunto por columna, por ejemplo, una operación por columna.
# Suma de valores por columna de numpy importación asarray # Definir los datos como una lista datos = [[[[1,2,3], [[4,5,6]] # Convertir a una matriz numérica datos = asarray(datos) # Resumir el contenido de la matriz imprimir(datos) # Suma de datos por columna resultado = datos.suma(eje=0) # resumir el resultado imprimir(resultado) |
Ejecutando el ejemplo primero se imprime la matriz, luego se realiza la operación de suma en columna e imprime el resultado.
Podemos ver que la matriz tiene seis valores con dos filas y tres columnas como se esperaba; podemos entonces ver que la operación de columna resulta en un vector con tres valores, uno para la suma de cada columna que coincide con nuestra expectativa.
Eje=1 Operación de fila
El ajuste de la eje=1 cuando se realiza una operación en una matriz NumPy se realiza la operación en forma de fila, es decir, a través de todas las columnas de cada fila.
... # Suma de datos por fila resultado = datos.suma(eje=1) |
Por ejemplo, dados nuestros datos con dos filas y tres columnas:
Datos = [[1, 2, 3], 4, 5, 6]] |
Esperamos que una suma en forma de fila con eje=1 resulte en dos valores, uno para cada fila, de la siguiente manera:
- Fila 1: 1 + 2 + 3 = 6
- Fila 2: 4 + 5 + 6 = 15
El siguiente ejemplo demuestra la suma de valores en el conjunto por fila, por ejemplo, una operación por fila.
# Suma de valores por fila de numpy importación asarray # Definir los datos como una lista datos = [[[[1,2,3], [[4,5,6]] # Convertir a una matriz numérica datos = asarray(datos) # Resumir el contenido de la matriz imprimir(datos) # Suma de datos por fila resultado = datos.suma(eje=1) # resumir el resultado imprimir(resultado) |
Ejecutando el ejemplo primero se imprime la matriz, luego se realiza la operación de suma en forma de fila y se imprime el resultado.
Podemos ver que la matriz tiene seis valores con dos filas y tres columnas como se esperaba; podemos entonces ver que la operación por filas resulta en un vector con dos valores, uno para la suma de cada fila que coincide con nuestra expectativa.
Ahora tenemos una idea concreta de cómo establecer el eje apropiadamente cuando se realizan operaciones en nuestras matrices NumPy.