:nosearch: .. _op_ai_onnx_Split-13: Split - version 13 ================== This page documents version **13** of operator **Split**. See :doc:`Split` for the latest version (since version 18). - **Domain**: ``ai.onnx`` - **Since version**: 13 Split a tensor into a list of tensors, along the specified 'axis'. Lengths of the parts can be specified using input 'split'. Otherwise, the tensor is split to equal sized parts. **Inputs** - **input** (*T*): The tensor to split - **split** (*tensor(int64)*): Optional length of each output. Values should be >= 0.Sum of the values must be equal to the dim value at 'axis' specified. **Outputs** Between 1 and ∞ outputs. - **outputs** (*T*): One or more outputs forming list of tensors after splitting **Attributes** - **axis** (*int*): Which axis to split on. A negative value means counting dimensions from the back. Accepted range is [-rank, rank-1] where r = rank(input). **Type Constraints** - **T**: Constrain input and output types to all tensor types. Allowed types: tensor(bfloat16), tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8). Examples -------- **test_cc_split_equal_parts_1d_opset13** .. code-block:: text Node: Split(input) -> (output_1, output_2, output_3) Attributes: axis = 0 .. code-block:: text Inputs: input: shape=(6,), dtype=float32 [1., 2., 3., 4., 5., 6.] Outputs: output_1: shape=(2,), dtype=float32 [1., 2.] output_2: shape=(2,), dtype=float32 [3., 4.] output_3: shape=(2,), dtype=float32 [5., 6.] **test_cc_split_equal_parts_2d_opset13** .. code-block:: text Node: Split(input) -> (output_1, output_2) Attributes: axis = 1 .. code-block:: text Inputs: input: shape=(2, 6), dtype=float32 [[ 1., 2., 3., 4., 5., 6.], [ 7., 8., 9., 10., 11., 12.]] Outputs: output_1: shape=(2, 3), dtype=float32 [[1., 2., 3.], [7., 8., 9.]] output_2: shape=(2, 3), dtype=float32 [[ 4., 5., 6.], [10., 11., 12.]] **test_cc_split_equal_parts_default_axis_opset13** .. code-block:: text Node: Split(input) -> (output_1, output_2, output_3) .. code-block:: text Inputs: input: shape=(6,), dtype=float32 [1., 2., 3., 4., 5., 6.] Outputs: output_1: shape=(2,), dtype=float32 [1., 2.] output_2: shape=(2,), dtype=float32 [3., 4.] output_3: shape=(2,), dtype=float32 [5., 6.] **test_cc_split_variable_parts_1d_opset13** .. code-block:: text Node: Split(input, split) -> (output_1, output_2) Attributes: axis = 0 .. code-block:: text Inputs: input: shape=(6,), dtype=float32 [1., 2., 3., 4., 5., 6.] split: shape=(2,), dtype=int64 [2, 4] Outputs: output_1: shape=(2,), dtype=float32 [1., 2.] output_2: shape=(4,), dtype=float32 [3., 4., 5., 6.] **test_cc_split_variable_parts_2d_opset13** .. code-block:: text Node: Split(input, split) -> (output_1, output_2) Attributes: axis = 1 .. code-block:: text Inputs: input: shape=(2, 6), dtype=float32 [[ 1., 2., 3., 4., 5., 6.], [ 7., 8., 9., 10., 11., 12.]] split: shape=(2,), dtype=int64 [2, 4] Outputs: output_1: shape=(2, 2), dtype=float32 [[1., 2.], [7., 8.]] output_2: shape=(2, 4), dtype=float32 [[ 3., 4., 5., 6.], [ 9., 10., 11., 12.]] **test_cc_split_variable_parts_default_axis_opset13** .. code-block:: text Node: Split(input, split) -> (output_1, output_2) .. code-block:: text Inputs: input: shape=(6,), dtype=float32 [1., 2., 3., 4., 5., 6.] split: shape=(2,), dtype=int64 [2, 4] Outputs: output_1: shape=(2,), dtype=float32 [1., 2.] output_2: shape=(4,), dtype=float32 [3., 4., 5., 6.] **test_cc_split_zero_size_splits_opset13** .. code-block:: text Node: Split(input, split) -> (output_1, output_2, output_3) .. code-block:: text Inputs: input: shape=(0,), dtype=float32 [] split: shape=(3,), dtype=int64 [0, 0, 0] Outputs: output_1: shape=(0,), dtype=float32 [] output_2: shape=(0,), dtype=float32 [] output_3: shape=(0,), dtype=float32 [] Differences with previous version (11) -------------------------------------- **SchemaDiff**: ``Split`` (domain ``'ai.onnx'``) * old version: 11 * new version: 13 * breaking: **yes** **Breaking reasons:** * input 'split' (added): at position 1; option=Single; type_str='tensor(int64)' * attribute 'split' (removed): type=INTS; required=False **Inputs:** * [BREAKING] added 'split': at position 1; option=Single; type_str='tensor(int64)' **Attributes:** * [BREAKING] removed 'split': type=INTS; required=False **Type constraints:** * changed 'T': added types: ['tensor(bfloat16)'] **Documentation:** * line similarity: 0.67 (+1/-1 lines) .. code-block:: diff --- Split v11 +++ Split v13 @@ -1,3 +1,3 @@ Split a tensor into a list of tensors, along the specified -'axis'. Lengths of the parts can be specified using argument 'split'. +'axis'. Lengths of the parts can be specified using input 'split'. Otherwise, the tensor is split to equal sized parts.