Функция Einsum в NumPy

NumPyBeginner
Практиковаться сейчас

Введение

Этот вызов познакомит вас с numpy.einsum — мощной и универсальной функцией для тензорных операций. Вместо вызова конкретных функций, таких как dot, trace или multiply, einsum позволяет определять эти и другие операции с помощью простой строковой нотации. Выполнив этот вызов, вы получите глубокое понимание того, как использовать einsum для распространенных и сложных манипуляций с массивами.

Задание 1: Матричное умножение

Умножение матриц — это фундаментальная операция в линейной алгебре. С помощью einsum вы можете выразить эту операцию, определяя, как должны комбинироваться индексы входных массивов. Для двух матриц A (размер m \times n) и B (размер n \times p) определяется произведение C (размер m \times p). В нотации einsum это выглядит как ij,jk->ik. Повторяющийся индекс j суммируется.

Ваша задача

Завершите функцию matmul в файле matmul.py. Эта функция должна использовать numpy.einsum для умножения двух матриц, A и B, и возвращать результат.

Файл для редактирования

  • /home/labex/project/matmul.py

Файл был создан для вас со следующим содержимым:

import numpy as np

def matmul(A: np.ndarray, B: np.ndarray) -> np.ndarray:
    ## TODO: Perform matrix multiplication using Numpy's einsum function.
    pass
✨ Проверить решение и практиковаться

Задание 2: След матрицы

След квадратной матрицы — это сумма элементов на ее главной диагонали. einsum предоставляет очень лаконичный способ указать это суммирование. Для матрицы A диагональные элементы — это те, у которых индекс строки равен индексу столбца (A_{ii}). Строка einsum для этой операции — ii->. Повторяющийся индекс i указывает на суммирование, а пустой вывод означает, что результатом является скаляр.

Ваша задача

Завершите функцию trace в файле trace_of_matrix.py. Используйте numpy.einsum для вычисления следа данной квадратной матрицы A.

Файл для редактирования

  • /home/labex/project/trace_of_matrix.py

Файл был создан для вас со следующим содержимым:

import numpy as np

def trace(A: np.ndarray) -> float:
    ## TODO: Compute the trace of a matrix using Numpy's einsum function.
    pass
✨ Проверить решение и практиковаться

Задание 3: Произведение Адамара

Произведение Адамара, или поэлементное произведение, создает новую матрицу, где каждый элемент является произведением соответствующих элементов из двух входных матриц одинаковой формы. Для двух матриц A и B формы (m \times n) произведение Адамара C также имеет форму (m \times n), где C_{ij} = A_{ij} \times B_{ij}. Строка einsum для этого — ij,ij->ij.

Ваша задача

Завершите функцию hadamard_product в файле hadamard_product.py. Эта функция должна вычислять поэлементное произведение двух матриц, A и B, используя numpy.einsum.

Файл для редактирования

  • /home/labex/project/hadamard_product.py

Файл был создан для вас со следующим содержимым:

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
✨ Проверить решение и практиковаться

Задание 4: Свертка тензоров

einsum действительно раскрывает свой потенциал при работе с многомерными массивами, или тензорами. Свертка тензоров — это обобщение матричного умножения. В этой задаче вы выполните свертку 3D тензора A формы (m \times n \times p) с 2D матрицей B формы (p \times q). Цель состоит в том, чтобы просуммировать по общему измерению p, в результате чего получится новый тензор формы (m \times n \times q). Строка einsum для этой операции — ijk,kl->ijl.

Ваша задача

Завершите функцию tensor_contract в файле tensor_contract.py. Используйте numpy.einsum для выполнения свертки между 3D тензором A и 2D матрицей B.

Файл для редактирования

  • /home/labex/project/tensor_contract.py

Файл был создан для вас со следующим содержимым:

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
✨ Проверить решение и практиковаться

Резюме

Поздравляем с завершением испытания NumPy Einsum! Вы успешно использовали einsum для выполнения матричного умножения, вычисления следа матрицы, вычисления произведения Адамара и выполнения свертки тензоров. Это демонстрирует вашу способность использовать нотацию Эйнштейна для написания лаконичного, эффективного и читаемого кода для сложных операций с массивами.