logcumsumexp

paddle. logcumsumexp ( x, axis=None, dtype=None, name=None ) [源代码]

计算 x 的指数的前缀和的对数。

假设输入是二维矩阵,j 是 axis 维的下标,i 是另一维的下标,那么运算结果将是

\[logcumsumexp(x)_{ij} = log \sum_{i=0}^{j}exp(x_{ij})\]

注解

结果的第一个元素和输入的第一个元素相同。

参数

  • x (Tensor) - 需要进行操作的 Tensor。

  • axis (int,可选) - 指明需要计算的维度。-1 代表最后一维。默认:None,将输入展开为一维变量再进行计算。

  • dtype (str,可选) - 输出 Tensor 的数据类型,支持 float16、float32、float64。如果指定了,那么在执行操作之前,输入 Tensor 将被转换为 dtype。这对于防止数据类型溢出非常有用。默认为:None。

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

返回

  • Tensor (Tensor),x 的指数的前缀和的对数。

代码示例

>>> import paddle

>>> data = paddle.arange(12, dtype='float64')
>>> data = paddle.reshape(data, (3, 4))

>>> y = paddle.logcumsumexp(data)
>>> y
Tensor(shape=[12], dtype=float64, place=Place(cpu), stop_gradient=True,
[0.         , 1.31326169 , 2.40760596 , 3.44018970 , 4.45191440 ,
 5.45619332 , 6.45776285 , 7.45833963 , 8.45855173 , 9.45862974 ,
 10.45865844, 11.45866900])

>>> y = paddle.logcumsumexp(data, axis=0)
>>> y
Tensor(shape=[3, 4], dtype=float64, place=Place(cpu), stop_gradient=True,
[[0.         , 1.         , 2.         , 3.         ],
 [4.01814993 , 5.01814993 , 6.01814993 , 7.01814993 ],
 [8.01847930 , 9.01847930 , 10.01847930, 11.01847930]])

>>> y = paddle.logcumsumexp(data, axis=-1)
>>> y
Tensor(shape=[3, 4], dtype=float64, place=Place(cpu), stop_gradient=True,
[[0.         , 1.31326169 , 2.40760596 , 3.44018970 ],
 [4.         , 5.31326169 , 6.40760596 , 7.44018970 ],
 [8.         , 9.31326169 , 10.40760596, 11.44018970]])

>>> y = paddle.logcumsumexp(data, dtype='float64')
>>> assert y.dtype == paddle.float64