torch.sparse.mm
-
torch.sparse.mm()[исходный код] -
Выполняет умножение разреженной матрицы
mat1на матрицуmat2(разреженную или со страйдовым размещением). Подобноtorch.mm(), еслиmat1— тензор размера ,mat2— тензор размера , то out будет тензором размера . Еслиmat1— тензор COO, он должен иметьsparse_dim = 2.Поддерживаются форматы хранения CSR и COO.
Примечание
Поддержка градиентов:
- COO @ Dense: обратный проход поддерживается для обоих входных аргументов. Градиент для разреженного входа возвращается в виде разреженного тензора COO.
- CSR @ Dense: обратный проход поддерживается для обоих входных аргументов. Градиент для разреженного входа возвращается в виде разреженного тензора CSR.
- CSC/BSR/BSC @ Dense: не поддерживается.
- Sparse @ Sparse (COO @ COO, CSR @ CSR): прямой проход выполняется, но обратный проход не поддерживается.
- Смешанные форматы (COO @ CSR, CSR @ COO): не поддерживаются.
Эта функция также принимает необязательный аргумент
reduce, который позволяет задать необязательную операцию редукции. Математически выполняется следующая операция:где обозначает оператор редукции.
reduceреализован только для формата хранения CSR на устройстве CPU.- Параметры:
- Форма:
-
Формат выходного тензора этой функции соответствует следующим правилам: - разреженный × разреженный -> разреженный - разреженный × плотный -> плотный
Пример:
>>> a = torch.tensor([[1., 0, 2], [0, 3, 0]]).to_sparse().requires_grad_() >>> a tensor(indices=tensor([[0, 0, 1], [0, 2, 1]]), values=tensor([1., 2., 3.]), size=(2, 3), nnz=3, layout=torch.sparse_coo, requires_grad=True) >>> b = torch.tensor([[0, 1.], [2, 0], [0, 0]], requires_grad=True) >>> b tensor([[0., 1.], [2., 0.], [0., 0.]], requires_grad=True) >>> y = torch.sparse.mm(a, b) >>> y tensor([[0., 1.], [6., 0.]], grad_fn=<SparseAddmmBackward0>) >>> y.sum().backward() >>> a.grad tensor(indices=tensor([[0, 0, 1], [0, 2, 1]]), values=tensor([1., 0., 2.]), size=(2, 3), nnz=3, layout=torch.sparse_coo) >>> c = a.detach().to_sparse_csr() >>> c tensor(crow_indices=tensor([0, 2, 3]), col_indices=tensor([0, 2, 1]), values=tensor([1., 2., 3.]), size=(2, 3), nnz=3, layout=torch.sparse_csr) >>> y1 = torch.sparse.mm(c, b, 'sum') >>> y1 tensor([[0., 1.], [6., 0.]], grad_fn=<SparseMmReduceImplBackward0>) >>> y2 = torch.sparse.mm(c, b, 'max') >>> y2 tensor([[0., 1.], [6., 0.]], grad_fn=<SparseMmReduceImplBackward0>)
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.sparse.mm.html