Warning: This API is deprecated and will be removed in a future
version of TensorFlow after
the replacement is stable.
ScatterNd
Stay organized with collections
Save and categorize content based on your preferences.
Scatters `updates` into a tensor of shape `shape` according to `indices`.
Scatter sparse `updates` according to individual values at the specified
`indices`. This op returns an output tensor with the `shape` you specify. This
op is the inverse of the tf.gather_nd
operator which extracts values or slices
from a given tensor.
This operation is similar to tf.tensor_scatter_nd_add
, except that the tensor
is zero-initialized. Calling tf.scatter_nd(indices, updates, shape)
is identical to calling
`tf.tensor_scatter_nd_add(tf.zeros(shape, updates.dtype), indices, updates)`
If `indices` contains duplicates, the associated `updates` are accumulated
(summed) into the output tensor.
WARNING: For floating-point data types, the output may be nondeterministic.
This is because the order in which the updates are applied is nondeterministic
and when floating-point numbers are added in different orders the resulting
numerical approximation error can be slightly different. However, the output
will be deterministic if op determinism is enabled via
tf.config.experimental.enable_op_determinism
.
`indices` is an integer tensor containing indices into the output tensor. The
last dimension of `indices` can be at most the rank of `shape`:
indices.shape[-1] <= shape.rank
The last dimension of `indices` corresponds to indices of elements
(if `indices.shape[-1] = shape.rank`) or slices
(if `indices.shape[-1] < shape.rank`) along dimension `indices.shape[-1]` of
`shape`.
`updates` is a tensor with shape:
indices.shape[:-1] + shape[indices.shape[-1]:]
The simplest form of the scatter op is to insert individual elements in
a tensor by index. Consider an example where you want to insert 4 scattered
elements in a rank-1 tensor with 8 elements.
In Python, this scatter operation would look like this:
indices = tf.constant([[4], [3], [1], [7]])
updates = tf.constant([9, 10, 11, 12])
shape = tf.constant([8])
scatter = tf.scatter_nd(indices, updates, shape)
print(scatter)
The resulting tensor would look like this:
[0, 11, 0, 10, 9, 0, 0, 12]
You can also insert entire slices of a higher rank tensor all at once. For
example, you can insert two slices in the first dimension of a rank-3 tensor
with two matrices of new values.
In Python, this scatter operation would look like this:
indices = tf.constant([[1], [3]])
updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6],
[7, 7, 7, 7], [8, 8, 8, 8]],
[[5, 5, 5, 5], [6, 6, 6, 6],
[7, 7, 7, 7], [8, 8, 8, 8]]])
shape = tf.constant([4, 4, 4])
scatter = tf.scatter_nd(indices, updates, shape)
print(scatter)
The resulting tensor would look like this:
[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],
[[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]],
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],
[[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]]]
Note that on CPU, if an out of bound index is found, an error is returned.
On GPU, if an out of bound index is found, the index is ignored.
Public Methods
Output<U>
|
asOutput()
Returns the symbolic handle of a tensor.
|
static
<U, T extends Number>
ScatterNd<U>
|
|
Output<U>
|
output()
A new tensor with the given shape and updates applied according
to the indices.
|
Inherited Methods
From class
java.lang.Object
boolean
|
equals(Object arg0)
|
final
Class<?>
|
getClass()
|
int
|
hashCode()
|
final
void
|
notify()
|
final
void
|
notifyAll()
|
String
|
toString()
|
final
void
|
wait(long arg0, int arg1)
|
final
void
|
wait(long arg0)
|
final
void
|
wait()
|
Public Methods
public
Output<U>
asOutput
()
Returns the symbolic handle of a tensor.
Inputs to TensorFlow operations are outputs of another TensorFlow operation. This method is
used to obtain a symbolic handle that represents the computation of the input.
Factory method to create a class wrapping a new ScatterNd operation.
Parameters
scope |
current scope |
indices |
Tensor of indices. |
updates |
Values to scatter into the output tensor. |
shape |
1-D. The shape of the output tensor. |
Returns
- a new instance of ScatterNd
public
Output<U>
output
()
A new tensor with the given shape and updates applied according
to the indices.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2022-10-27 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2022-10-27 UTC."],[],[],null,["# ScatterNd\n\npublic final class **ScatterNd** \nScatters \\`updates\\` into a tensor of shape \\`shape\\` according to \\`indices\\`.\n\n\nScatter sparse \\`updates\\` according to individual values at the specified\n\\`indices\\`. This op returns an output tensor with the \\`shape\\` you specify. This\nop is the inverse of the [`tf.gather_nd`](https://www.tensorflow.org/api_docs/python/tf/gather_nd) operator which extracts values or slices\nfrom a given tensor.\n\n\nThis operation is similar to [`tf.tensor_scatter_nd_add`](https://www.tensorflow.org/api_docs/python/tf/tensor_scatter_nd_add), except that the tensor\nis zero-initialized. Calling [`tf.scatter_nd(indices, updates, shape)`](https://www.tensorflow.org/api_docs/python/tf/scatter_nd)\nis identical to calling\n\\`tf.tensor_scatter_nd_add(tf.zeros(shape, updates.dtype), indices, updates)\\`\n\n\nIf \\`indices\\` contains duplicates, the associated \\`updates\\` are accumulated\n(summed) into the output tensor.\n\n\n**WARNING** : For floating-point data types, the output may be nondeterministic.\nThis is because the order in which the updates are applied is nondeterministic\nand when floating-point numbers are added in different orders the resulting\nnumerical approximation error can be slightly different. However, the output\nwill be deterministic if op determinism is enabled via\n[`tf.config.experimental.enable_op_determinism`](https://www.tensorflow.org/api_docs/python/tf/config/experimental/enable_op_determinism).\n\n\n\\`indices\\` is an integer tensor containing indices into the output tensor. The\nlast dimension of \\`indices\\` can be at most the rank of \\`shape\\`:\n\n\nindices.shape\\[-1\\] \\\u003c= shape.rank\n\n\nThe last dimension of \\`indices\\` corresponds to indices of elements\n(if \\`indices.shape\\[-1\\] = shape.rank\\`) or slices\n(if \\`indices.shape\\[-1\\] \\\u003c shape.rank\\`) along dimension \\`indices.shape\\[-1\\]\\` of\n\\`shape\\`.\n\n\n\\`updates\\` is a tensor with shape:\n\n\nindices.shape\\[:-1\\] + shape\\[indices.shape\\[-1\\]:\\]\n\n\nThe simplest form of the scatter op is to insert individual elements in\na tensor by index. Consider an example where you want to insert 4 scattered\nelements in a rank-1 tensor with 8 elements.\n\n\nIn Python, this scatter operation would look like this: \n\n indices = tf.constant([[4], [3], [1], [7]])\n updates = tf.constant([9, 10, 11, 12])\n shape = tf.constant([8])\n scatter = tf.scatter_nd(indices, updates, shape)\n print(scatter)\n \nThe resulting tensor would look like this:\n\n\n\\[0, 11, 0, 10, 9, 0, 0, 12\\]\n\n\nYou can also insert entire slices of a higher rank tensor all at once. For\nexample, you can insert two slices in the first dimension of a rank-3 tensor\nwith two matrices of new values.\n\n\nIn Python, this scatter operation would look like this: \n\n indices = tf.constant([[1], [3]])\n updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6],\n [7, 7, 7, 7], [8, 8, 8, 8]],\n [[5, 5, 5, 5], [6, 6, 6, 6],\n [7, 7, 7, 7], [8, 8, 8, 8]]])\n shape = tf.constant([4, 4, 4])\n scatter = tf.scatter_nd(indices, updates, shape)\n print(scatter)\n \nThe resulting tensor would look like this:\n\n\n\\[\\[\\[0, 0, 0, 0\\], \\[0, 0, 0, 0\\], \\[0, 0, 0, 0\\], \\[0, 0, 0, 0\\]\\],\n\\[\\[5, 5, 5, 5\\], \\[6, 6, 6, 6\\], \\[7, 7, 7, 7\\], \\[8, 8, 8, 8\\]\\],\n\\[\\[0, 0, 0, 0\\], \\[0, 0, 0, 0\\], \\[0, 0, 0, 0\\], \\[0, 0, 0, 0\\]\\],\n\\[\\[5, 5, 5, 5\\], \\[6, 6, 6, 6\\], \\[7, 7, 7, 7\\], \\[8, 8, 8, 8\\]\\]\\]\n\n\nNote that on CPU, if an out of bound index is found, an error is returned.\nOn GPU, if an out of bound index is found, the index is ignored.\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n### Public Methods\n\n|--------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| [Output](/api_docs/java/org/tensorflow/Output)\\\u003cU\\\u003e | [asOutput](/api_docs/java/org/tensorflow/op/core/ScatterNd#asOutput())() Returns the symbolic handle of a tensor. |\n| static \\\u003cU, T extends Number\\\u003e [ScatterNd](/api_docs/java/org/tensorflow/op/core/ScatterNd)\\\u003cU\\\u003e | [create](/api_docs/java/org/tensorflow/op/core/ScatterNd#create(org.tensorflow.op.Scope,%20org.tensorflow.Operand\u003cT\u003e,%20org.tensorflow.Operand\u003cU\u003e,%20org.tensorflow.Operand\u003cT\u003e))([Scope](/api_docs/java/org/tensorflow/op/Scope) scope, [Operand](/api_docs/java/org/tensorflow/Operand)\\\u003cT\\\u003e indices, [Operand](/api_docs/java/org/tensorflow/Operand)\\\u003cU\\\u003e updates, [Operand](/api_docs/java/org/tensorflow/Operand)\\\u003cT\\\u003e shape) Factory method to create a class wrapping a new ScatterNd operation. |\n| [Output](/api_docs/java/org/tensorflow/Output)\\\u003cU\\\u003e | [output](/api_docs/java/org/tensorflow/op/core/ScatterNd#output())() A new tensor with the given shape and updates applied according to the indices. |\n\n### Inherited Methods\n\nFrom class [org.tensorflow.op.PrimitiveOp](/api_docs/java/org/tensorflow/op/PrimitiveOp) \n\n|------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|\n| final boolean | [equals](/api_docs/java/org/tensorflow/op/PrimitiveOp#equals(java.lang.Object))(Object obj) |\n| final int | [hashCode](/api_docs/java/org/tensorflow/op/PrimitiveOp#hashCode())() |\n| [Operation](/api_docs/java/org/tensorflow/Operation) | [op](/api_docs/java/org/tensorflow/op/PrimitiveOp#op())() Returns the underlying [Operation](/api_docs/java/org/tensorflow/Operation) |\n| final String | [toString](/api_docs/java/org/tensorflow/op/PrimitiveOp#toString())() |\n\nFrom class java.lang.Object \n\n|------------------|---------------------------|\n| boolean | equals(Object arg0) |\n| final Class\\\u003c?\\\u003e | getClass() |\n| int | hashCode() |\n| final void | notify() |\n| final void | notifyAll() |\n| String | toString() |\n| final void | wait(long arg0, int arg1) |\n| final void | wait(long arg0) |\n| final void | wait() |\n\nFrom interface [org.tensorflow.Operand](/api_docs/java/org/tensorflow/Operand) \n\n|--------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|\n| abstract [Output](/api_docs/java/org/tensorflow/Output)\\\u003cU\\\u003e | [asOutput](/api_docs/java/org/tensorflow/Operand#asOutput())() Returns the symbolic handle of a tensor. |\n\nPublic Methods\n--------------\n\n#### public [Output](/api_docs/java/org/tensorflow/Output)\\\u003cU\\\u003e\n**asOutput**\n()\n\nReturns the symbolic handle of a tensor.\n\nInputs to TensorFlow operations are outputs of another TensorFlow operation. This method is\nused to obtain a symbolic handle that represents the computation of the input.\n\n\u003cbr /\u003e\n\n#### public static [ScatterNd](/api_docs/java/org/tensorflow/op/core/ScatterNd)\\\u003cU\\\u003e\n**create**\n([Scope](/api_docs/java/org/tensorflow/op/Scope) scope, [Operand](/api_docs/java/org/tensorflow/Operand)\\\u003cT\\\u003e indices, [Operand](/api_docs/java/org/tensorflow/Operand)\\\u003cU\\\u003e updates, [Operand](/api_docs/java/org/tensorflow/Operand)\\\u003cT\\\u003e shape)\n\nFactory method to create a class wrapping a new ScatterNd operation. \n\n##### Parameters\n\n| scope | current scope |\n| indices | Tensor of indices. |\n| updates | Values to scatter into the output tensor. |\n| shape | 1-D. The shape of the output tensor. |\n|---------|-------------------------------------------|\n\n##### Returns\n\n- a new instance of ScatterNd \n\n#### public [Output](/api_docs/java/org/tensorflow/Output)\\\u003cU\\\u003e\n**output**\n()\n\nA new tensor with the given shape and updates applied according\nto the indices."]]