mv

paddle.sparse. mv ( x, vec, name=None ) [源代码]

注解

该 API 从 CUDA 11.0 开始支持。

输入 x 为稀疏矩阵,输入 vec 为稠密向量,对 xvec 计算矩阵与向量相乘。

输入、输出的格式对应关系如下:

注解

x[SparseCsrTensor] @ vec[DenseTensor] -> out[DenseTensor]

x[SparseCooTensor] @ vec[DenseTensor] -> out[DenseTensor]

该 API 支持反向传播。输入 x 的 shape 应该为 [M, N] ,输入 vec 的 shape 应该为 [N] ,输出 out 的 shape 为 [M]

参数

  • x (SparseTensor) - 输入的 2D 稀疏 Tensor,可以为 SparseCooTensor|SparseCsrTensor。数据类型为 float32、float64。

  • vec (DenseTensor) - 输入 1D 稠密 Tensor,表示一个向量。数据类型为 float32、float64。

  • name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

DenseTensor: 维度为 1,表示一个向量,数据类型与输入相同。

代码示例

# required: gpu
import paddle
from paddle.fluid.framework import _test_eager_guard
paddle.seed(100)

# csr @ dense -> dense
with _test_eager_guard():
    crows = [0, 2, 3, 5]
    cols = [1, 3, 2, 0, 1]
    values = [1., 2., 3., 4., 5.]
    dense_shape = [3, 4]
    csr = paddle.sparse.sparse_csr_tensor(crows, cols, values, dense_shape)
    # Tensor(shape=[3, 4], dtype=paddle.float32, place=Place(gpu:0), stop_gradient=True,
    #        crows=[0, 2, 3, 5],
    #        cols=[1, 3, 2, 0, 1],
    #        values=[1., 2., 3., 4., 5.])
    vec = paddle.randn([4])

    out = paddle.sparse.mv(csr, vec)
    # Tensor(shape=[3], dtype=float32, place=Place(gpu:0), stop_gradient=True,
    #        [-3.85499096, -2.42975140, -1.75087738])