Programa Python para obtener el producto punto de vectores multidimensionales usando NumPy

Dados dos vectores multidimensionales, la tarea es escribir un programa en Python para obtener el producto punto de dos vectores multidimensionales usando NumPy.

Ejemplo: Tomemos 2 vectores a = [2,5,3] y b = [6,3,1]

Producto punto (ab) = (a[0] * b[0])+ (a[1] * b[1]) + (a[2] * b[2]) = (2*6)+ (5 *3) + (3*1) = 30

El producto escalar es la suma del producto de los elementos en cada posición del vector.

Producto punto de vectores 1-D:

Ahora implementemos esto en python. Pero no necesitamos codificar esto desde cero, gracias a Numpy. El módulo Numpy tiene un método dot que toma 2 vectores y devuelve el producto escalar de ellos

Python3

# import numpy
import numpy as np
  
# initialize vectors
a = np.array([2,5,3])
b = np.array([6,3,1])
  
# calculating Dot product form np.dot
c = np.dot(a,b)
print("Dot product of a and b is: ",c)

Producción:

Dot product of a and b is:  30

Producto escalar de vectores bidimensionales:

El producto escalar de un vector bidimensional es una simple multiplicación de arrays. En un vector unidimensional, la longitud de cada vector debe ser la misma, pero cuando se trata de un vector bidimensional, tendremos longitudes en 2 direcciones, a saber, filas y columnas. Las filas y columnas de un vector 2D no necesariamente deben ser iguales, pero el número de columnas del primer vector debe coincidir con el número de filas del segundo vector.

Ejemplo:

Hagamos lo mismo con Python (módulo Numpy)

Python3

# import numpy
import numpy as np
  
# initialize 2d vectors
a = np.array([[3, 9],
              [2, 5]])
b = np.array([[6, 1],
              [4, 8]])
  
# Checking the condition "No. of columns 
# of first vector == No. of rows of the
# second vector"
if a.shape[1] == b.shape[0]:
    
    # calculating Dot product using np.dot
    c = np.dot(a, b)
    print("Dot product of a and b is:\n", c)
else:
    print("No. of columns of first vector should match\
    with No. of rows of the second vector")

Producción:

Dot product of a and b is:
 [[54 75]
 [32 42]]

Ejemplo:

En este ejemplo, con el mismo enfoque que se muestra en el ejemplo anterior, estamos trabajando con diferentes puntos de datos y agregando una declaración if en caso de que el código produzca un error.

Python3

# import numpy
import numpy as np
  
# initialize vectors
a = np.array([[3,9,6],
              [2,5,2]])
b = np.array([[6,1],
              [4,8],
              [7,5]])
  
# Checking the condition "No. of columns
# of first vector == No. of rows of the 
# second vector"
if a.shape[1] == b.shape[0]:
    # calculating Dot product using np.dot
    c = np.dot(a,b)
    print("Dot product of a and b is:\n",c)
else:
    print("No. of columns of first vector should match with \
    No. of rows of the second vector")

Producción:

Dot product of a and b is:
[[ 96 105]
[ 46  52]]

Lanzará un error si la condición no se cumple, eliminemos nuestro bloque if y calculemos el producto escalar con diferentes formas para ver cuál es el error.

Python3

# import numpy
import numpy as np
  
# initialize vectors
a = np.array([[3,9],
              [2,5]])
b = np.array([[6,1],
              [4,8],
              [7,5]])
print("Shape of vector a: ",a.shape)
print("Shape of vector b: ",b.shape)
  
# calculating Dot product using np.dot
c = np.dot(a,b)
print("Dot product of a and b is:\n",c)

Forma del vector a: (2, 2)

Forma del vector b: (3, 2)

——————————————————————————

ValueError Traceback (última llamada más reciente)

<ipython-input-18-346715f1fc30> en <módulo>

     12 

     13 # calcular el producto de puntos usando np.dot

—> 14 c = np.punto(a,b)

     15 print(“El producto escalar de a y b es:\n”,c)

<__array_function__ internals> in dot(*args, **kwargs)

ValueError: formas (2,2) y (3,2) no alineadas: 2 (dim 1) != 3 (dim 0)

Publicación traducida automáticamente

Artículo escrito por sandeepburra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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