Функция scatter_nd
Функция scatter_nd распределяет значения
из тензора updates в новый тензор
по указанным индексам indices.
Первым параметром передается тензор индексов,
вторым - тензор значений, третьим -
форма результирующего тензора.
Функция возвращает тензор той же формы,
что и указанная форма, в котором позиции
из indices заполнены значениями
из updates, а остальные элементы равны нулю.
Синтаксис
tf.scatter_nd(indices, updates, shape)
Пример
Давайте распределим значения 1, 2,
3, 4, 5 по позициям
0, 2, 4, 6, 8
в тензоре длины 10:
import tensorflow as tf
indices = tf.constant([[0], [2], [4], [6], [8]])
updates = tf.constant([1, 2, 3, 4, 5])
t = tf.scatter_nd(indices, updates, [10])
print(t)
Результат выполнения кода:
tf.Tensor([1 0 2 0 3 0 4 0 5 0], shape=(10,), dtype=int32)
Пример
Давайте распределим значения по двумерным
координатам в тензоре формы 3 на 4:
import tensorflow as tf
indices = tf.constant([[0, 0], [1, 2], [2, 3]])
updates = tf.constant([1, 2, 3])
t = tf.scatter_nd(indices, updates, [3, 4])
print(t)
Результат выполнения кода:
tf.Tensor(
[[1 0 0 0]
[0 0 2 0]
[0 0 0 3]], shape=(3, 4), dtype=int32)
Пример
Давайте передадим индексы в виде тензора с несколькими координатами для одной позиции, чтобы сложить значения в одной ячейке:
import tensorflow as tf
indices = tf.constant([[0], [0], [1]])
updates = tf.constant([1, 2, 3])
t = tf.scatter_nd(indices, updates, [3])
print(t)
Результат выполнения кода:
tf.Tensor([3 3 0], shape=(3,), dtype=int32)
Пример
Давайте распределим значения с плавающей точкой по индексам и выведем результат в виде массива NumPy:
import tensorflow as tf
indices = tf.constant([[1], [3]])
updates = tf.constant([1.5, 2.5], dtype=tf.float32)
t = tf.scatter_nd(indices, updates, [5])
res = t.numpy()
print(res)
Результат выполнения кода:
[0. 1.5 0. 2.5 0. ]