# tf.math.cumprod

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

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

``````tf.math.cumprod([a, b, c])  # [a, a * b, a * b * c]
``````

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

``````tf.math.cumprod([a, b, c], exclusive=True)  # [1, a, a * b]
``````

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

``````tf.math.cumprod([a, b, c], reverse=True)  # [a * b * c, b * c, c]
``````

This is more efficient than using separate `tf.reverse` ops. The `reverse` and `exclusive` kwargs can also be combined:

``````tf.math.cumprod([a, b, c], exclusive=True, reverse=True)  # [b * c, c, 1]
``````

`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 cumprod.
`reverse` A `bool` (default: False).
`name` A name for the operation (optional).

A `Tensor`. Has the same type as `x`.

[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"Missing the information I need" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"Too complicated / too many steps" },{ "type": "thumb-down", "id": "outOfDate", "label":"Out of date" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"Samples / code issue" },{ "type": "thumb-down", "id": "otherDown", "label":"Other" }]
[{ "type": "thumb-up", "id": "easyToUnderstand", "label":"Easy to understand" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"Solved my problem" },{ "type": "thumb-up", "id": "otherUp", "label":"Other" }]