logcumsumexp

paddle. logcumsumexp ( x, axis=None, dtype=None, name=None ) [source]

The logarithm of the cumulative summation of the exponentiation of the elements along a given axis.

For summation index j given by axis and other indices i, the result is

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

Note

The first element of the result is the same as the first element of the input.

Parameters
  • x (Tensor) – The input tensor.

  • axis (int, optional) – The dimension to do the operation along. -1 means the last dimension. The default (None) is to compute the cumsum over the flattened array.

  • dtype (str, optional) – The data type of the output tensor, can be float16, float32, float64. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. The default value is None.

  • name (str, optional) – Name for the operation (optional, default is None). For more information, please refer to Name.

Returns

Tensor, the result of logcumsumexp operator.

Examples

>>> 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