# 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 --> 1000 256 10 15 < !-- indices --> 125 20 < !-- updates --> 1000 125 20 10 15 < !-- axis --> 1 < !-- value [1] --> < !-- output --> 1000 256 10 15 *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} --> < !-- output --> 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, 2.0f, 13.0f, 14.0f}} --> @endsphinxdirective