matrix multiplication in python

3 formas de multiplicar matrices en Python

Publicado por
Comparte en redes sociales


En este tutorial, aprenderá cómo multiplicar dos matrices en Python.

Comenzará aprendiendo la condición válida de multiplicación de matrices y escribirá una función de Python personalizada para multiplicar matrices. A continuación, verá cómo puede lograr el mismo resultado utilizando listas anidadas.

Finalmente, continuará usando NumPy y sus funciones integradas para realizar la multiplicación de matrices de manera más eficiente.

Cómo verificar si la multiplicación de matrices es válida

Antes de escribir el código de Python para la multiplicación de matrices, repasemos los conceptos básicos de la multiplicación de matrices.

La multiplicación de matrices entre dos matrices A y B solo es válida si el el numero de columnas en la matriz UN es igual para Número de filas en la matriz B.

Probablemente te hayas encontrado con esta condición antes para la multiplicación de matrices. Sin embargo, ¿alguna vez te has preguntado por qué es así?

Bueno, es por la forma en que funciona la multiplicación de matrices. Mira la imagen de abajo.

En nuestro ejemplo genérico, la matriz A tiene metro filas y no columnas. Y la matriz B tiene no filas y pag columnas.

cryptoshitcompra.com/wp-content/uploads/2022/05/3-formas-de-multiplicar-matrices-en-Python.png» alt=»matriz-multiplicar» class=»wp-image-94165″/>

¿Cuál es la forma de la matriz del producto?

El elemento en el índice (i, j) en la matriz C resultante es el producto escalar de la fila i de la matriz A y la columna j de la matriz B.

Por lo tanto, para obtener un elemento en un índice particular en la matriz C resultante, deberá calcular el producto escalar de la fila y la columna correspondientes en las matrices A y B, respectivamente.

Al repetir el proceso anterior, obtendrá la matriz de productos C de la forma mxp-con metro filas y pag columnas, como se muestra a continuación.

png» alt=»producto de matriz» class=»wp-image-94160″/>

Y el producto escalar o producto escalar entre dos vectores un y b viene dada por la siguiente ecuación.

producto escalar

Resumamos ahora:

  • Es obvio que el producto escalar se define solo entre vectores de igual longitud.
  • Entonces, para que el producto punto entre una fila y una columna sea válido, al multiplicar dos matrices, necesitaría que ambas tuvieran la misma cantidad de elementos.
  • En el ejemplo genérico anterior, cada fila de la matriz A tiene no elementos. Y cada columna de la matriz B tiene no elementos también.

Si miras más de cerca, no es el número de columnas en la matriz A, y también es el número de filas en la matriz B. Y es precisamente por eso que necesita el el numero de columnas en la matriz UN estar igual para Número de filas en la matriz B.

Espero que entiendas la condición para que la multiplicación de matrices sea válida y cómo obtener cada elemento de la matriz del producto.

Sigamos escribiendo código Python para multiplicar dos matrices.

Escriba una función de Python personalizada para multiplicar matrices

Primero, escribamos una función personalizada para multiplicar las matrices.

Esta función debería hacer lo siguiente:

  • Acepte dos matrices, A y B, como entradas.
  • Comprueba si la multiplicación de matrices entre A y B es válida.
  • Si es válido, multiplique las dos matrices A y B, y devuelva la matriz producto C.
  • De lo contrario, devuelve un mensaje de error que indica que las matrices A y B no se pueden multiplicar.

Etapa 1: Genere dos matrices de enteros usando NumPy random.randint() Una función. También puede declarar matrices como listas de Python anidadas.

import numpy as np
np.random.seed(27)
A = np.random.randint(1,10,size = (3,3))
B = np.random.randint(1,10,size = (3,2))
print(f"Matrix A:\n {A}\n")
print(f"Matrix B:\n {B}\n")

# Output
Matrix A:
 [[4 9 9]
 [9 1 6]
 [9 2 3]]

Matrix B:
 [[2 2]
 [5 7]
 [4 4]]

2do paso: Continúe y defina la función. multiply_matrix(A,B). Esta función toma dos matrices A y B como entradas y devuelve la matriz del producto C si la multiplicación de matrices es válida.

def multiply_matrix(A,B):
  global C
  if  A.shape[1] == B.shape[0]:
    C = np.zeros((A.shape[0],B.shape[1]),dtype = int)
    for row in range(rows): 
        for col in range(cols):
            for elt in range(len(B)):
              C[row, col] += A[row, elt] * B[elt, col]
    return C
  else:
    return "Sorry, cannot multiply A and B."

Análisis de definición de funciones

Pasemos a analizar la definición de la función.

Leer también  17 Top E-Commerce Trends To Keep Up With Going Into 2024

Declarar C como variable global: Por defecto, todas las variables dentro de una función de Python tienen ámbito local. Y no puede acceder desde fuera de la función. Para que la matriz de productos de C sea accesible desde el exterior, necesitaremos declararla como una variable global. Solo agrega el global calificador antes del nombre de la variable.

Comprueba si la multiplicación de matrices es válida: Utilizar el shape atributo para verificar si A y B se pueden multiplicar. Para cualquier mesa arr, arr.shape[0] y arr.shape[1] dar el numero de Líneas y columnas, respectivamente. Entonces if A.shape[1] == B.shape[0] comprueba si la multiplicación de matrices es válida. Sólo si esta condición es True, se calculará la matriz del producto. De lo contrario, la función devuelve un mensaje de error.

Use bucles anidados para calcular valores: Para calcular los elementos de la matriz resultante, necesitamos iterar sobre las filas de la matriz A, y el exterior for bucle hace eso. interior for loop nos ayuda a iterar sobre la columna de la matriz B. Y cuanto más profundo for loop permite el acceso a cada elemento de la columna seleccionada.

▶️ Ahora que hemos aprendido cómo funciona la función de Python para multiplicar matrices, llamemos a la función con las matrices A y B que generamos anteriormente.

multiply_matrix(A,B)

# Output
array([[ 89, 107],
       [ 47,  49],
       [ 40,  44]])

Dado que la multiplicación de matrices entre A y B es válida, la función multiply_matrix() devuelve la matriz producto C.

Use la comprensión de listas anidadas de Python para multiplicar matrices

En la sección anterior, escribió una función de Python para multiplicar matrices. Ahora verá cómo puede usar comprensiones de listas anidadas para hacer lo mismo.

Aquí está la comprensión de la lista anidada para multiplicar matrices.

lista-anidada-comprensión-matriz-multiplicar

Al principio, puede parecer complicado. Pero analizaremos la comprensión de la lista anidada paso a paso.

Centrémonos en la comprensión de una lista a la vez e identifiquemos lo que hace.

Usaremos el siguiente modelo general para la comprensión de listas:

[<do-this&gt; for <item&gt; in <iterable>]

where,
<do-this>: what you'd like to do—expression or operation
<item>: each item you'd like to perform the operation on
<iterable>: the iterable (list, tuple, etc.) that you're looping through

▶️ Consulte nuestra guía Comprensión de listas en Python, con ejemplos para obtener una comprensión profunda.

Antes de continuar, tenga en cuenta que nos gustaría construir la matriz C resultante una fila a la vez.

Comprender las listas anidadas explicadas

Etapa 1: Calcular valor único en la matriz C

Dada la fila i de la matriz A y la columna j de la matriz B, la siguiente expresión da la entrada en el índice (i, j) en la matriz C.

sum(a*b for a,b in zip(A_row, B_col)

# zip(A_row, B_col) returns an iterator of tuples
# If A_row = [a1, a2, a3] & B_col = [b1, b2, b3]
# zip(A_row, B_col) returns (a1, b1), (a2, b2), and so on

i = j = 1la expresión devolverá la entrada c_11 de la matriz C. Entonces puedes obtener un elemento en una fila de esta manera.

Leer también  El futuro de las redes ópticas flexibles y escalables

2do paso: Construya una fila en la matriz C

Nuestro próximo objetivo es construir una línea completa.

Para la fila 1 de la matriz A, debe iterar sobre todas las columnas de la matriz B para obtener una fila completa en la matriz C.

Regrese al modelo de comprensión de listas.

  • Reemplazar <do-this> con la expresión del paso 1, porque eso es lo que quieres hacer.
  • Luego reemplaza <item> con B_col—cada columna de la matriz B.
  • Finalmente reemplazar <iterable> con zip(*B)— la lista que contiene todas las columnas de la matriz B.

Y aquí está la primera lista de comprensión.

[sum(a*b for a,b in zip(A_row, B_col)) for B_col in zip(*B)] 

# zip(*B): * is the unzipping operator
# zip(*B) returns a list of columns in matrix B

Paso 3: Construya todas las filas y obtenga la matriz C

Luego, deberá completar la matriz de productos C calculando el resto de las filas.

Y para eso, necesitas iterar sobre todas las filas de la matriz A.

Vuelva a comprender la lista nuevamente y haga lo siguiente.

  • Reemplazar <do-this> con la lista de comprensión del paso 2. Recuerda que calculamos una fila completa en el paso anterior.
  • Ahora reemplaza <item> con A_row— cada fila de la matriz A.
  • Y tu <iterable> es la propia matriz A, a medida que recorre sus filas.

Y aquí está nuestra comprensión final de la lista anidada.🎊

[[sum(a*b for a,b in zip(A_row, B_col)) for B_col in zip(*B)] 
    for A_row in A]

¡Es hora de comprobar el resultado! ✔

# cast into NumPy array using np.array()
C = np.array([[sum(a*b for a,b in zip(A_row, B_col)) for B_col in zip(*B)] 
    for A_row in A])

# Output:
[[ 89 107]
 [ 47  49]
 [ 40  44]]

Si miras de cerca, es equivalente a los bucles for anidados que teníamos antes, pero es más breve.

También puede hacerlo de manera más eficiente mediante el uso de algunas funciones integradas. Averigüemos sobre ellos en la siguiente sección.

Use NumPy matmul() para multiplicar matrices en Python

la np.matmul() toma dos matrices como entrada y devuelve el producto si la multiplicación de matrices entre las matrices de entrada es válido.

C = np.matmul(A,B)
print(C)

# Output:
[[ 89 107]
 [ 47  49]
 [ 40  44]]

Observe cuánto más simple es este método que los dos métodos que aprendimos anteriormente. De hecho, en lugar de np.matmul()puede usar un operador @ equivalente, y lo veremos de inmediato.

Cómo usar el operador @ en Python para multiplicar matrices

en Python, @ es un operador binario utilizado para la multiplicación de matrices.

Opera sobre dos matrices y, en general, sobre arreglos NumPy N-dimensionales, y devuelve la matriz producto.

Notar: Debe tener Python 3.5 y versiones posteriores para usar el @ operador.

Así es como puedes usarlo.

C = [email protected]
print(C)

# Output
array([[ 89, 107],
       [ 47,  49],
       [ 40,  44]])

Tenga en cuenta que la matriz de productos C es la misma que obtuvimos anteriormente.

Leer también  9 Best Markdown Editors to Write Better Documentation

¿Puedes usar np.dot() para multiplicar matrices?

Si alguna vez ha encontrado código que usa np.dot() para multiplicar dos matrices, así es como funciona.

C = np.dot(A,B)
print(C)

# Output:
[[ 89 107]
 [ 47  49]
 [ 40  44]]

verás que np.dot(A, B) también devuelve la matriz del producto esperado.

Sin embargo, según documentos numpyDeberías usar np.dot() solo para calcular el producto escalar de dos vectores unidimensionales y no para la multiplicación de matrices.

Recuerde de la sección anterior, el elemento de índice (i, j) de la matriz de productos C es el producto escalar de la fila i de la matriz A y la columna j de la matriz B.

Como NumPy transmite implícitamente esta operación de producto de punto en todas las filas y columnas, obtiene la matriz de producto resultante. Pero para mantener su código legible y evitar la ambigüedad, utilice np.matmul() o el @ operador en su lugar.

Conclusión

🎯 En este tutorial, has aprendido lo siguiente.

  • Condición para que la multiplicación de matrices sea válida: número de columnas en la matriz UN = número de Líneas en la matriz B.
  • Cómo escribir una función de Python personalizada que verifique si la multiplicación de matrices es válida y devuelva la matriz del producto. El cuerpo de la función utiliza bucles for anidados.
  • A continuación, aprendió a usar listas anidadas para multiplicar matrices. Son más breves que los bucles for, pero son propensos a problemas de legibilidad.
  • Finalmente, aprendió cómo usar la función NumPy integrada np.matmul() para multiplicar matrices y cómo es la más eficiente en términos de velocidad.
  • Usted también es consciente de la @ operador para multiplicar dos matrices en Python.

Y eso concluye nuestra discusión sobre la multiplicación de matrices en Python. Como siguiente paso, aprenda cómo verificar si un número es primo en Python. O resolver problemas interesantes en cadenas de Python.

¡Feliz aprendizaje!🎉



Source link

Si quiere puede hacernos una donación por el trabajo que hacemos, lo apreciaremos mucho.

Direcciones de Billetera:

- BTC: 14xsuQRtT3Abek4zgDWZxJXs9VRdwxyPUS 

- USDT: TQmV9FyrcpeaZMro3M1yeEHnNjv7xKZDNe 

- BNB: 0x2fdb9034507b6d505d351a6f59d877040d0edb0f

- DOGE: D5SZesmFQGYVkE5trYYLF8hNPBgXgYcmrx 

También puede seguirnos en nuestras Redes sociales para mantenerse al tanto de los últimos post de la web:

-Twitter

- Telegram

Disclaimer: En Cryptoshitcompra.com no nos hacemos responsables de ninguna inversión de ningún visitante, nosotros simplemente damos información sobre Tokens, juegos NFT y criptomonedas, no recomendamos inversiones

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *