Spec-Zone.ru › PyTorch 2.14

torch.linalg.multi_dot

torch.linalg.multi_dot(tensors, *, out=None) [исходный код]

Эффективно перемножает две или более матриц, переупорядочивая умножения таким образом, чтобы выполнить как можно меньше арифметических операций.

Поддерживаются входные данные типов float, double, cfloat и cdouble. Эта функция не поддерживает пакетные входные данные.

Каждый тензор в tensors должен быть двумерным, за исключением первого и последнего, которые могут быть одномерными. Если первый тензор — одномерный вектор формы (n,), он рассматривается как вектор-строка формы (1, n). Аналогично, если последний тензор — одномерный вектор формы (n,), он рассматривается как вектор-столбец формы (n, 1).

Если первый и последний тензоры являются матрицами, результатом будет матрица. Однако если любой из них является одномерным вектором, результатом будет одномерный вектор.

Отличия от numpy.linalg.multi_dot:

  • В отличие от numpy.linalg.multi_dot, первый и последний тензоры должны быть одномерными или двумерными, тогда как NumPy допускает тензоры любой размерности

Предупреждение

Эта функция не выполняет широковещание.

Примечание

Эта функция реализована посредством последовательного вызова torch.mm() после вычисления оптимального порядка умножения матриц.

Примечание

Стоимость умножения двух матриц формы (a, b) и (b, c) равна a * b * c. Для матриц A, B, C с формами (10, 100), (100, 5), (5, 50) соответственно стоимость разных порядков умножения можно вычислить следующим образом:

cost⁡((AB)C)=10×100×5+10×5×50=7500cost⁡(A(BC))=10×100×50+100×5×50=75000\begin{align*} \operatorname{cost}((AB)C) &= 10 \times 100 \times 5 + 10 \times 5 \times 50 = 7500 \\ \operatorname{cost}(A(BC)) &= 10 \times 100 \times 50 + 100 \times 5 \times 50 = 75000 \end{align*}

В этом случае сначала перемножить A и B, а затем умножить результат на C — в 10 раз быстрее.

Параметры:

tensors (Sequence[Tensor]) – два или более тензора для перемножения. Первый и последний тензоры могут быть одномерными или двумерными. Все остальные тензоры должны быть двумерными.

Именованные аргументы:

out (Tensor, optional) – выходной тензор. Игнорируется, если None. По умолчанию: None.

Примеры:

>>> from torch.linalg import multi_dot

>>> multi_dot([torch.tensor([1, 2]), torch.tensor([2, 3])])
tensor(8)
>>> multi_dot([torch.tensor([[1, 2]]), torch.tensor([2, 3])])
tensor([8])
>>> multi_dot([torch.tensor([[1, 2]]), torch.tensor([[2], [3]])])
tensor([[8]])

>>> A = torch.arange(2 * 3).view(2, 3)
>>> B = torch.arange(3 * 2).view(3, 2)
>>> C = torch.arange(2 * 2).view(2, 2)
>>> multi_dot((A, B, C))
tensor([[ 26,  49],
        [ 80, 148]])

© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.linalg.multi_dot.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API