# tf.math.cumsum

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.13.1/tensorflow/python/ops/math_ops.py#L4304-L4373) |

Compute the cumulative sum of the tensor `x` along `axis`.

#### View aliases


**Main aliases**

[`tf.cumsum`](https://www.tensorflow.org/api_docs/python/tf/math/cumsum)
**Compat aliases for migration**

See
[Migration guide](https://www.tensorflow.org/guide/migrate) for
more details.

[`tf.compat.v1.cumsum`](https://www.tensorflow.org/api_docs/python/tf/math/cumsum), [`tf.compat.v1.math.cumsum`](https://www.tensorflow.org/api_docs/python/tf/math/cumsum)

<br />

    tf.math.cumsum(
        x, axis=0, exclusive=False, reverse=False, name=None
    )

By default, this op performs an inclusive cumsum, which means that the first
element of the input is identical to the first element of the output:
For example:

    # tf.cumsum([a, b, c])   # [a, a + b, a + b + c]
    x = tf.constant([2, 4, 6, 8])
    tf.cumsum(x)
    <tf.Tensor: shape=(4,), dtype=int32,
    numpy=array([ 2,  6, 12, 20], dtype=int32)>

    # using varying `axis` values
    y = tf.constant([[2, 4, 6, 8], [1,3,5,7]])
    tf.cumsum(y, axis=0)
    <tf.Tensor: shape=(2, 4), dtype=int32, numpy=
    array([[ 2,  4,  6,  8],
           [ 3,  7, 11, 15]], dtype=int32)>
    tf.cumsum(y, axis=1)
    <tf.Tensor: shape=(2, 4), dtype=int32, numpy=
    array([[ 2,  6, 12, 20],
           [ 1,  4,  9, 16]], dtype=int32)>

By setting the `exclusive` kwarg to `True`, an exclusive cumsum is performed
instead:

    # tf.cumsum([a, b, c], exclusive=True)  => [0, a, a + b]
    x = tf.constant([2, 4, 6, 8])
    tf.cumsum(x, exclusive=True)
    <tf.Tensor: shape=(4,), dtype=int32,
    numpy=array([ 0,  2,  6, 12], dtype=int32)>

By setting the `reverse` kwarg to `True`, the cumsum is performed in the
opposite direction:

    # tf.cumsum([a, b, c], reverse=True)  # [a + b + c, b + c, c]
    x = tf.constant([2, 4, 6, 8])
    tf.cumsum(x, reverse=True)
    <tf.Tensor: shape=(4,), dtype=int32,
    numpy=array([20, 18, 14,  8], dtype=int32)>

This is more efficient than using separate [`tf.reverse`](https://www.tensorflow.org/versions/r2.13/api_docs/python/tf/reverse) ops.
The `reverse` and `exclusive` kwargs can also be combined:

    # tf.cumsum([a, b, c], exclusive=True, reverse=True)  # [b + c, c, 0]
    x = tf.constant([2, 4, 6, 8])
    tf.cumsum(x, exclusive=True, reverse=True)
    <tf.Tensor: shape=(4,), dtype=int32,
    numpy=array([18, 14,  8,  0], dtype=int32)>

<br />

<br />

<br />

| ## Args ||
|---|---|
| `x` | A `Tensor`. Must be one of the following types: `float32`, `float64`, `int64`, `int32`, `uint8`, `uint16`, `int16`, `int8`, `complex64`, `complex128`, `qint8`, `quint8`, `qint32`, `half`. |
| `axis` | A `Tensor` of type `int32` (default: 0). Must be in the range `[-rank(x), rank(x))`. |
| `exclusive` | If `True`, perform exclusive cumsum. |
| `reverse` | A `bool` (default: False). |
| `name` | A name for the operation (optional). |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| A `Tensor`. Has the same type as `x`. ||

<br />