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)соответственно стоимость разных порядков умножения можно вычислить следующим образом:В этом случае сначала перемножить
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