Função Einsum do NumPy

NumPyBeginner
Pratique Agora

Introdução

Este desafio apresenta o numpy.einsum, uma função poderosa e versátil para operações de tensores. Em vez de chamar funções específicas como dot, trace ou multiply, o einsum permite definir essas operações e outras usando uma notação simples baseada em strings. Ao completar este desafio, você obterá uma compreensão sólida de como usar o einsum para manipulações de arrays comuns e complexas.

Tarefa 1: Multiplicação de Matrizes

A multiplicação de matrizes é uma operação fundamental na álgebra linear. Com o einsum, você pode expressar essa operação definindo como os índices dos arrays de entrada devem ser combinados. Para duas matrizes $A$ (shape $m \times n$) e $B$ (shape $n \times p$), o produto $C$ (shape $m \times p$) é definido. Na notação einsum, isso é ij,jk->ik. O índice repetido j é somado.

Sua Tarefa

Complete a função matmul no arquivo matmul.py. Esta função deve usar numpy.einsum para multiplicar duas matrizes, A e B, e retornar o resultado.

Arquivo para Editar

  • /home/labex/project/matmul.py

O arquivo foi criado para você com o seguinte conteúdo:

import numpy as np

def matmul(A: np.ndarray, B: np.ndarray) -> np.ndarray:
    ## TODO: Perform matrix multiplication using Numpy's einsum function.
    pass

Tarefa 2: Traço de uma Matriz

O traço de uma matriz quadrada é a soma dos elementos em sua diagonal principal. O einsum oferece uma maneira muito concisa de especificar essa soma. Para uma matriz $A$, os elementos da diagonal são aqueles onde o índice da linha é igual ao índice da coluna ($A_{ii}$). A string einsum para esta operação é ii->. O índice repetido i indica a soma, e a saída vazia significa que o resultado é um escalar.

Sua Tarefa

Complete a função trace em trace_of_matrix.py. Use numpy.einsum para calcular o traço de uma matriz quadrada dada A.

Arquivo para Editar

  • /home/labex/project/trace_of_matrix.py

O arquivo foi criado para você com o seguinte conteúdo:

import numpy as np

def trace(A: np.ndarray) -> float:
    ## TODO: Compute the trace of a matrix using Numpy's einsum function.
    pass

Tarefa 3: Produto de Hadamard

O produto de Hadamard, ou produto elemento a elemento, cria uma nova matriz onde cada elemento é o produto dos elementos correspondentes de duas matrizes de entrada com a mesma forma. Para duas matrizes $A$ e $B$ de forma $(m \times n)$, o produto de Hadamard $C$ também tem a forma $(m \times n)$, onde $C_{ij} = A_{ij} \times B_{ij}$. A string einsum para isso é ij,ij->ij.

Sua Tarefa

Complete a função hadamard_product em hadamard_product.py. Esta função deve calcular o produto elemento a elemento de duas matrizes, A e B, usando numpy.einsum.

Arquivo para Editar

  • /home/labex/project/hadamard_product.py

O arquivo foi criado para você com o seguinte conteúdo:

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

Tarefa 4: Contração de Tensor

O einsum realmente brilha ao lidar com arrays de dimensões mais altas, ou tensores. A contração de tensores é uma generalização da multiplicação de matrizes. Nesta tarefa, você contrairá um tensor 3D $A$ de forma $(m \times n \times p)$ com uma matriz 2D $B$ de forma $(p \times q)$. O objetivo é somar sobre a dimensão compartilhada p, resultando em um novo tensor de forma $(m \times n \times q)$. A string einsum para esta operação é ijk,kl->ijl.

Sua Tarefa

Complete a função tensor_contract em tensor_contract.py. Use numpy.einsum para realizar uma contração entre um tensor 3D A e uma matriz 2D B.

Arquivo para Editar

  • /home/labex/project/tensor_contract.py

O arquivo foi criado para você com o seguinte conteúdo:

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

Resumo

Parabéns por completar o Desafio NumPy Einsum! Você usou com sucesso o einsum para realizar multiplicação de matrizes, calcular o traço de uma matriz, computar o produto de Hadamard e realizar contração de tensores. Isso demonstra sua capacidade de usar a notação de somatório de Einstein para escrever código conciso, eficiente e legível para operações complexas de arrays.

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar