# ScatterUpdate {#openvino_docs_ops_movement_ScatterUpdate_3}
@sphinxdirective
**Versioned name**: *ScatterUpdate-3*
**Category**: *Data movement*
**Short description**: *ScatterUpdate* creates a copy of the first input tensor with updated elements specified with second and third input tensors.
**Detailed description**: *ScatterUpdate* creates a copy of the first input tensor with updated elements in positions specified with ``indices`` input
and values specified with ``updates`` tensor starting from the dimension with index ``axis``. For the ``data`` tensor of shape :math:`[d_0,\;d_1,\;\dots,\;d_n]`, ``indices`` tensor of shape :math:`[i_0,\;i_1,\;\dots,\;i_k]` and ``updates`` tensor of shape :math:`[d_0,\;d_1,\;\dots,\;d_{axis - 1},\;i_0,\;i_1,\;\dots,\;i_k,\;d_{axis + 1},\;\dots, d_n]` the operation computes for each ``m, n, ..., p`` of the ``indices`` tensor indices:
.. math::
data[\dots,\;indices[m,\;n,\;\dots,\;p],\;\dots] = updates[\dots,\;m,\;n,\;\dots,\;p,\;\dots]
where first :math:`\dots` in the ``data`` corresponds to :math:`[d_0,\;\dots,\;d_{axis - 1}]` dimensions, last :math:`\dots` in the ``data`` corresponds to the ``rank(data) - (axis + 1)`` dimensions.
Several examples for case when `axis = 0`:
1. ``indices`` is a :math:`0` D tensor: :math:`data[indices,\;\dots] = updates[\dots]`
2. ``indices`` is a :math:`1` D tensor (:math:`\forall_{i}`): :math:`data[indices[i],\;\dots] = updates[i,\;\dots]`
3. ``indices`` is a :math:`N` D tensor (:math:`\forall_{i,\;\dots,\;j}`): :math:`data[indices[i],\;\dots,\;j],\;\dots] = updates[i,\;\dots,\;j,\;\dots]`
**Attributes**: *ScatterUpdate* does not have attributes.
**Inputs**:
* **1**: ``data`` tensor of arbitrary rank ``r`` and type *T_NUMERIC*. **Required.**
* **2**: ``indices`` tensor with indices of type *T_IND*. All index values are expected to be within bounds ``[0, s - 1]`` along the axis of size ``s``. If multiple indices point to the
same output location, the order of updating the values is undefined. If an index points to a non-existing output
tensor element or is negative, then an exception is raised. **Required.**
* **3**: ``updates`` tensor of type *T_NUMERIC* and rank equal to ``rank(indices) + rank(data) - 1`` **Required.**
* **4**: ``axis`` tensor with scalar or 1D tensor with one element of type *T_AXIS* specifying axis for scatter.
The value can be in the range ``[ -r, r - 1]``, where ``r`` is the rank of ``data``. **Required.**
**Outputs**:
* **1**: tensor with shape equal to ``data`` tensor of the type *T_NUMERIC*.
**Types**
* *T_NUMERIC*: any numeric type.
* *T_IND*: any supported integer types.
* *T_AXIS*: any supported integer types.
**Examples**
*Example 1*
.. code-block:: cpp
< !-- data -->
10002561015 < !-- indices -->
12520 < !-- updates -->
1000125201015 < !-- axis -->
1 < !-- value [1] -->
*Example 2*
.. code-block:: cpp
< !-- data -->
3 < !-- {{-1.0f, 1.0f, -1.0f, 3.0f, 4.0f}, -->
5 < !-- {-1.0f, 6.0f, -1.0f, 8.0f, 9.0f}, -->
< !-- {-1.0f, 11.0f, 1.0f, 13.0f, 14.0f}} -->
< !-- indices -->
2 < !-- {0, 2} -->
< !-- updates -->
3 < !-- {1.0f, 1.0f} -->
2 < !-- {1.0f, 1.0f} -->
< !-- {1.0f, 2.0f} -->
< !-- axis -->
1 < !-- {1} -->
@endsphinxdirective