РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
219 of 769 menu

Функция outer

Функция outer вычисляет внешнее произведение двух векторов. Первым параметром передаётся первый вектор (тензор размерности 1), вторым параметром - второй вектор. Результатом является двумерный тензор (матрица), где элемент с индексами i, j равен произведению элемента i первого вектора на элемент j второго вектора. Функция поддерживает вычисления на GPU и автоматическое дифференцирование.

Синтаксис

torch.outer(vec1, vec2)

Пример

Давайте вычислим внешнее произведение двух простых векторов:

import torch v1 = torch.tensor([1, 2, 3]) v2 = torch.tensor([4, 5, 6]) res = torch.outer(v1, v2) print(res)

Результат выполнения кода:

tensor([ [4, 5, 6], [8, 10, 12], [12, 15, 18], ])

Как видно из результата, каждый элемент результирующей матрицы равен произведению элемента из первого вектора на элемент из второго.

Пример

Вычислим внешнее произведение векторов с плавающей точкой:

import torch v1 = torch.tensor([1.5, 2.0], dtype=torch.float32) v2 = torch.tensor([3.0, 4.0, 5.0], dtype=torch.float32) res = torch.outer(v1, v2) print(res)

Результат выполнения кода:

tensor([ [4.5000, 6.0000, 7.5000], [6.0000, 8.0000, 10.0000], ])

Пример

Используем функцию outer для создания матрицы весов в задачах линейной алгебры. Например, для вычисления матрицы ковариации между двумя наборами данных:

import torch torch.manual_seed(0) mean1 = torch.tensor([2.0]) mean2 = torch.tensor([3.0]) centered1 = torch.tensor([1.0, -1.0, 2.0]) centered2 = torch.tensor([2.0, -2.0, 1.0]) cov_matrix = torch.outer(centered1, centered2) / len(centered1) print(cov_matrix)

Результат выполнения кода:

tensor([ [0.6667, -0.6667, 0.3333], [-0.6667, 0.6667, -0.3333], [1.3333, -1.3333, 0.6667], ])

Пример

Функцию outer можно использовать для создания матриц специального вида, например, матрицы Якоби для градиентных вычислений:

import torch x = torch.tensor([2.0, 3.0, 4.0], requires_grad=True) w = torch.tensor([1.0, 2.0, 3.0]) grad = torch.outer(x, w) print(grad.shape) print(grad)

Результат выполнения кода:

torch.Size([3, 3]) tensor([ [2., 4., 6.], [3., 6., 9.], [4., 8., 12.], ], grad_fn=<OuterBackward0>)

Обратите внимание на наличие grad_fn - это означает, что функция поддерживает автоматическое дифференцирование.

Смотрите также

  • функцию dot,
    которая вычисляет скалярное произведение двух векторов
  • функцию matmul,
    которая выполняет матричное умножение тензоров
  • функцию mm,
    которая выполняет умножение двух двумерных матриц
  • функцию kron,
    которая вычисляет произведение Кронекера двух тензоров
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить