CumSum#

CumSum - 14#

Version

  • name: CumSum (GitHub)

  • domain: main

  • since_version: 14

  • function: False

  • support_level: SupportType.COMMON

  • shape inference: True

This version of the operator has been available since version 14.

Summary

Performs cumulative sum of the input elements along the given axis. By default, it will do the sum inclusively meaning the first element is copied as is. Through an exclusive attribute, this behavior can change to exclude the first element. It can also perform summation in the opposite direction of the axis. For that, set reverse attribute to 1.

Example:

input_x = [1, 2, 3]
axis=0
output = [1, 3, 6]
exclusive=1
output = [0, 1, 3]
exclusive=0
reverse=1
output = [6, 5, 3]
exclusive=1
reverse=1
output = [5, 3, 0]

Attributes

  • exclusive: If set to 1 will return exclusive sum in which the top element is not included. In other terms, if set to 1, the j-th output element would be the sum of the first (j-1) elements. Otherwise, it would be the sum of the first j elements. Default value is 0.

  • reverse: If set to 1 will perform the sums in reverse direction. Default value is 0.

Inputs

  • x (heterogeneous) - T: An input tensor that is to be processed.

  • axis (heterogeneous) - T2: A 0-D tensor. Must be in the range [-rank(x), rank(x)-1]. Negative value means counting dimensions from the back.

Outputs

  • y (heterogeneous) - T: Output tensor of the same type as ‘x’ with cumulative sums of the x’s elements

Type Constraints

  • T in ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16), tensor(int32), tensor(int64), tensor(uint32), tensor(uint64) ): Constrain input and output types to high-precision numeric tensors.

  • T2 in ( tensor(int32), tensor(int64) ): axis tensor can be int32 or int64 only

Examples

cumsum_1d

node = onnx.helper.make_node(
    'CumSum',
    inputs=['x', 'axis'],
    outputs=['y']
)
x = np.array([1., 2., 3., 4., 5.]).astype(np.float64)
axis = np.int32(0)
y = np.array([1., 3., 6., 10., 15.]).astype(np.float64)
expect(node, inputs=[x, axis], outputs=[y],
       name='test_cumsum_1d')

cumsum_1d_exclusive

node = onnx.helper.make_node(
    'CumSum',
    inputs=['x', 'axis'],
    outputs=['y'],
    exclusive=1
)
x = np.array([1., 2., 3., 4., 5.]).astype(np.float64)
axis = np.int32(0)
y = np.array([0., 1., 3., 6., 10.]).astype(np.float64)
expect(node, inputs=[x, axis], outputs=[y],
       name='test_cumsum_1d_exclusive')

cumsum_1d_reverse

node = onnx.helper.make_node(
    'CumSum',
    inputs=['x', 'axis'],
    outputs=['y'],
    reverse=1
)
x = np.array([1., 2., 3., 4., 5.]).astype(np.float64)
axis = np.int32(0)
y = np.array([15., 14., 12., 9., 5.]).astype(np.float64)
expect(node, inputs=[x, axis], outputs=[y],
       name='test_cumsum_1d_reverse')

cumsum_1d_reverse_exclusive

node = onnx.helper.make_node(
    'CumSum',
    inputs=['x', 'axis'],
    outputs=['y'],
    reverse=1,
    exclusive=1
)
x = np.array([1., 2., 3., 4., 5.]).astype(np.float64)
axis = np.int32(0)
y = np.array([14., 12., 9., 5., 0.]).astype(np.float64)
expect(node, inputs=[x, axis], outputs=[y],
       name='test_cumsum_1d_reverse_exclusive')

cumsum_2d_axis_0

node = onnx.helper.make_node(
    'CumSum',
    inputs=['x', 'axis'],
    outputs=['y'],
)
x = np.array([1., 2., 3., 4., 5., 6.]).astype(np.float64).reshape((2, 3))
axis = np.int32(0)
y = np.array([1., 2., 3., 5., 7., 9.]).astype(np.float64).reshape((2, 3))
expect(node, inputs=[x, axis], outputs=[y],
       name='test_cumsum_2d_axis_0')

cumsum_2d_axis_1

node = onnx.helper.make_node(
    'CumSum',
    inputs=['x', 'axis'],
    outputs=['y'],
)
x = np.array([1., 2., 3., 4., 5., 6.]).astype(np.float64).reshape((2, 3))
axis = np.int32(1)
y = np.array([1., 3., 6., 4., 9., 15.]).astype(np.float64).reshape((2, 3))
expect(node, inputs=[x, axis], outputs=[y],
       name='test_cumsum_2d_axis_1')

cumsum_2d_negative_axis

node = onnx.helper.make_node(
    'CumSum',
    inputs=['x', 'axis'],
    outputs=['y'],
)
x = np.array([1., 2., 3., 4., 5., 6.]).astype(np.float64).reshape((2, 3))
axis = np.int32(-1)
y = np.array([1., 3., 6., 4., 9., 15.]).astype(np.float64).reshape((2, 3))
expect(node, inputs=[x, axis], outputs=[y],
       name='test_cumsum_2d_negative_axis')

Differences

00Performs cumulative sum of the input elements along the given axis.Performs cumulative sum of the input elements along the given axis.
11By default, it will do the sum inclusively meaning the first element is copied as is.By default, it will do the sum inclusively meaning the first element is copied as is.
22Through an exclusive attribute, this behavior can change to exclude the first element.Through an exclusive attribute, this behavior can change to exclude the first element.
33It can also perform summation in the opposite direction of the axis. For that, set reverse attribute to 1.It can also perform summation in the opposite direction of the axis. For that, set reverse attribute to 1.
44
55Example:Example:
66::::
77
88 input_x = [1, 2, 3] input_x = [1, 2, 3]
99 axis=0 axis=0
1010 output = [1, 3, 6] output = [1, 3, 6]
1111 exclusive=1 exclusive=1
1212 output = [0, 1, 3] output = [0, 1, 3]
1313 exclusive=0 exclusive=0
1414 reverse=1 reverse=1
1515 output = [6, 5, 3] output = [6, 5, 3]
1616 exclusive=1 exclusive=1
1717 reverse=1 reverse=1
1818 output = [5, 3, 0] output = [5, 3, 0]
1919
2020**Attributes****Attributes**
2121
2222* **exclusive**:* **exclusive**:
2323 If set to 1 will return exclusive sum in which the top element is If set to 1 will return exclusive sum in which the top element is
2424 not included. In other terms, if set to 1, the j-th output element not included. In other terms, if set to 1, the j-th output element
2525 would be the sum of the first (j-1) elements. Otherwise, it would be would be the sum of the first (j-1) elements. Otherwise, it would be
2626 the sum of the first j elements. Default value is 0. the sum of the first j elements. Default value is 0.
2727* **reverse**:* **reverse**:
2828 If set to 1 will perform the sums in reverse direction. Default value is 0. If set to 1 will perform the sums in reverse direction. Default value is 0.
2929
3030**Inputs****Inputs**
3131
3232* **x** (heterogeneous) - **T**:* **x** (heterogeneous) - **T**:
3333 An input tensor that is to be processed. An input tensor that is to be processed.
3434* **axis** (heterogeneous) - **T2**:* **axis** (heterogeneous) - **T2**:
3535 A 0-D tensor. Must be in the range [-rank(x), rank(x)-1]. Negative A 0-D tensor. Must be in the range [-rank(x), rank(x)-1]. Negative
3636 value means counting dimensions from the back. value means counting dimensions from the back.
3737
3838**Outputs****Outputs**
3939
4040* **y** (heterogeneous) - **T**:* **y** (heterogeneous) - **T**:
4141 Output tensor of the same type as 'x' with cumulative sums of the Output tensor of the same type as 'x' with cumulative sums of the
4242 x's elements x's elements
4343
4444**Type Constraints****Type Constraints**
4545
4646* **T** in (* **T** in (
47 tensor(bfloat16),
4748 tensor(double), tensor(double),
4849 tensor(float), tensor(float),
50 tensor(float16),
4951 tensor(int32), tensor(int32),
5052 tensor(int64), tensor(int64),
5153 tensor(uint32), tensor(uint32),
5254 tensor(uint64) tensor(uint64)
5355 ): ):
5456 Input can be of any tensor type. Constrain input and output types to high-precision numeric tensors.
5557* **T2** in (* **T2** in (
5658 tensor(int32), tensor(int32),
5759 tensor(int64) tensor(int64)
5860 ): ):
5961 axis tensor can be int32 or int64 only axis tensor can be int32 or int64 only

CumSum - 11#

Version

  • name: CumSum (GitHub)

  • domain: main

  • since_version: 11

  • function: False

  • support_level: SupportType.COMMON

  • shape inference: True

This version of the operator has been available since version 11.

Summary

Performs cumulative sum of the input elements along the given axis. By default, it will do the sum inclusively meaning the first element is copied as is. Through an exclusive attribute, this behavior can change to exclude the first element. It can also perform summation in the opposite direction of the axis. For that, set reverse attribute to 1.

Example:

input_x = [1, 2, 3]
axis=0
output = [1, 3, 6]
exclusive=1
output = [0, 1, 3]
exclusive=0
reverse=1
output = [6, 5, 3]
exclusive=1
reverse=1
output = [5, 3, 0]

Attributes

  • exclusive: If set to 1 will return exclusive sum in which the top element is not included. In other terms, if set to 1, the j-th output element would be the sum of the first (j-1) elements. Otherwise, it would be the sum of the first j elements. Default value is 0.

  • reverse: If set to 1 will perform the sums in reverse direction. Default value is 0.

Inputs

  • x (heterogeneous) - T: An input tensor that is to be processed.

  • axis (heterogeneous) - T2: A 0-D tensor. Must be in the range [-rank(x), rank(x)-1]. Negative value means counting dimensions from the back.

Outputs

  • y (heterogeneous) - T: Output tensor of the same type as ‘x’ with cumulative sums of the x’s elements

Type Constraints

  • T in ( tensor(double), tensor(float), tensor(int32), tensor(int64), tensor(uint32), tensor(uint64) ): Input can be of any tensor type.

  • T2 in ( tensor(int32), tensor(int64) ): axis tensor can be int32 or int64 only