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.

Este é um Desafio (Challenge), que difere de um Laboratório Guiado (Guided Lab). Você precisa completar as tarefas de forma independente. Se encontrar dificuldades, sinta-se à vontade para pedir dicas ao Labby ou verificar a solução fornecida.

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
✨ Verificar Solução e Praticar

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
✨ Verificar Solução e Praticar

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
✨ Verificar Solução e Praticar

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
✨ Verificar Solução e Praticar

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.