dgl.sparse.SparseMatrix.reduce

SparseMatrix.reduce(dim: int | None = None, rtype: str = 'sum')

计算 input 稀疏矩阵沿给定维度 dim 的非零值的归约。

归约不计算零元素。如果待归约的行或列不包含任何非零元素,则结果为 0。

参数:
  • input (SparseMatrix) – 输入稀疏矩阵

  • dim (int, 可选) –

    要归约的维度,必须是 0(按行)、1(按列)或 None(同时按行和列)

    如果 dim 为 None,则归约稀疏矩阵的行和列,生成形状为 input.val.shape[1:] 的张量。否则,按行 (dim=0) 或列 (dim=1) 维度归约,生成形状为 (input.shape[1],) + input.val.shape[1:](input.shape[0],) + input.val.shape[1:] 的张量。

  • rtype (str, 可选) – 归约类型,为 ['sum', 'smin', 'smax', 'smean', 'sprod'] 之一,分别表示对非零元素求和、求最小值、求最大值、求平均值和求乘积

返回:

归约后的张量

返回类型:

torch.Tensor

示例

情况1:标量值稀疏矩阵

>>> indices = torch.tensor([[0, 1, 1], [0, 0, 2]])
>>> val = torch.tensor([1, 1, 2])
>>> A = dglsp.spmatrix(indices, val, shape=(4, 3))
>>> dglsp.reduce(A, rtype='sum')
tensor(4)
>>> dglsp.reduce(A, 0, 'sum')
tensor([2, 0, 2])
>>> dglsp.reduce(A, 1, 'sum')
tensor([1, 3, 0, 0])
>>> dglsp.reduce(A, 0, 'smax')
tensor([1, 0, 2])
>>> dglsp.reduce(A, 1, 'smin')
tensor([1, 1, 0, 0])

情况2:向量值稀疏矩阵

>>> indices = torch.tensor([[0, 1, 1], [0, 0, 2]])
>>> val = torch.tensor([[1., 2.], [2., 1.], [2., 2.]])
>>> A = dglsp.spmatrix(indices, val, shape=(4, 3))
>>> dglsp.reduce(A, rtype='sum')
tensor([5., 5.])
>>> dglsp.reduce(A, 0, 'sum')
tensor([[3., 3.],
        [0., 0.],
        [2., 2.]])
>>> dglsp.reduce(A, 1, 'smin')
tensor([[1., 2.],
        [2., 1.],
        [0., 0.],
        [0., 0.]])
>>> dglsp.reduce(A, 0, 'smean')
tensor([[1.5000, 1.5000],
        [0.0000, 0.0000],
        [2.0000, 2.0000]])