Función Einsum de NumPy

NumPyBeginner
Practicar Ahora

Introducción

Este desafío te introduce a numpy.einsum, una función potente y versátil para operaciones con tensores. En lugar de llamar a funciones específicas como dot, trace o multiply, einsum te permite definir estas operaciones y más utilizando una notación simple basada en cadenas de texto. Al completar este desafío, obtendrás una comprensión sólida de cómo usar einsum para manipulaciones de arrays comunes y complejas.

Este es un Desafío (Challenge), que difiere de un Laboratorio Guiado (Guided Lab). Necesitas completar las tareas de forma independiente. Si encuentras dificultades, no dudes en pedirle a Labby pistas o consultar la solución proporcionada.

Tarea 1: Multiplicación de Matrices

La multiplicación de matrices es una operación fundamental en álgebra lineal. Con einsum, puedes expresar esta operación definiendo cómo se deben combinar los índices de los arrays de entrada. Para dos matrices A (forma m \times n) y B (forma n \times p), se define el producto C (forma m \times p). En la notación einsum, esto es ij,jk->ik. El índice repetido j se suma.

Tu Tarea

Completa la función matmul en el archivo matmul.py. Esta función debe usar numpy.einsum para multiplicar dos matrices, A y B, y devolver el resultado.

Archivo a Editar

  • /home/labex/project/matmul.py

El archivo ha sido creado para ti con el siguiente contenido:

import numpy as np

def matmul(A: np.ndarray, B: np.ndarray) -> np.ndarray:
    ## TODO: Perform matrix multiplication using Numpy's einsum function.
    pass
✨ Revisar Solución y Practicar

Tarea 2: Traza de una Matriz

La traza de una matriz cuadrada es la suma de los elementos de su diagonal principal. einsum proporciona una forma muy concisa de especificar esta suma. Para una matriz A, los elementos de la diagonal son aquellos donde el índice de fila es igual al índice de columna (A_{ii}). La cadena einsum para esta operación es ii->. El índice repetido i indica la suma, y la salida vacía significa que el resultado es un escalar.

Tu Tarea

Completa la función trace en trace_of_matrix.py. Utiliza numpy.einsum para calcular la traza de una matriz cuadrada dada A.

Archivo a Editar

  • /home/labex/project/trace_of_matrix.py

El archivo ha sido creado para ti con el siguiente contenido:

import numpy as np

def trace(A: np.ndarray) -> float:
    ## TODO: Compute the trace of a matrix using Numpy's einsum function.
    pass
✨ Revisar Solución y Practicar

Tarea 3: Producto Hadamard

El producto de Hadamard, o producto elemento a elemento, crea una nueva matriz donde cada elemento es el producto de los elementos correspondientes de dos matrices de entrada de la misma forma. Para dos matrices A y B de forma (m \times n), el producto de Hadamard C también tiene forma (m \times n), donde C_{ij} = A_{ij} \times B_{ij}. La cadena einsum para esto es ij,ij->ij.

Tu Tarea

Completa la función hadamard_product en hadamard_product.py. Esta función debe calcular el producto elemento a elemento de dos matrices, A y B, utilizando numpy.einsum.

Archivo a Editar

  • /home/labex/project/hadamard_product.py

El archivo ha sido creado para ti con el siguiente contenido:

import numpy as np

def hadamard_product(A: np.ndarray, B: np.ndarray) -> np.ndarray:
    ## TODO: Compute the Hadamard product of two matrices using Numpy's einsum function.
    pass
✨ Revisar Solución y Practicar

Tarea 4: Contracción Tensorial

einsum realmente brilla cuando se trabaja con arrays de dimensiones superiores, o tensores. La contracción tensorial es una generalización de la multiplicación de matrices. En esta tarea, contraerás un tensor 3D A de forma (m \times n \times p) con una matriz 2D B de forma (p \times q). El objetivo es sumar sobre la dimensión compartida p, resultando en un nuevo tensor de forma (m \times n \times q). La cadena einsum para esta operación es ijk,kl->ijl.

Tu Tarea

Completa la función tensor_contract en tensor_contract.py. Utiliza numpy.einsum para realizar una contracción entre un tensor 3D A y una matriz 2D B.

Archivo a Editar

  • /home/labex/project/tensor_contract.py

El archivo ha sido creado para ti con el siguiente contenido:

import numpy as np

def tensor_contract(A: np.ndarray, B: np.ndarray) -> np.ndarray:
    ## TODO: Perform tensor contraction between two tensors using Numpy's einsum function.
    pass
✨ Revisar Solución y Practicar

Resumen

¡Felicitaciones por completar el Desafío NumPy Einsum! Has utilizado einsum con éxito para realizar multiplicación de matrices, calcular la traza de una matriz, computar el producto de Hadamard y realizar contracción tensorial. Esto demuestra tu habilidad para usar la notación de suma de Einstein para escribir código conciso, eficiente y legible para operaciones complejas con arrays.