'分配'张量流中的2D块切片?

时间:2017-07-03 14:50:37

标签: python tensorflow slice

tensorflow是否提供了一种方法来创建零张量,同时将一般切片替换为另一个切片?特别是,我需要在矩阵张量中分配2D块。这是我需要实现的一个例子:

给出可变形状的张量,例如

[1 2 3
 4 5 6],

和另一个定义切片的张量,例如

[0 0 0 0 0
 0 1 1 1 0
 0 1 1 1 0],

新张量应如下所示:

[0 0 0 0 0
 0 1 2 3 0
 0 4 5 6 0].

我知道那里scatter_nd,但它似乎只能“取代”#39;沿整个轴的值。我是否会错过任何操作或有任何解决方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

您可以在assign的适当切片上使用y

import numpy as np
import tensorflow as tf

x = tf.constant([[1,2,3],[4,5,6]])
y = tf.Variable([[0,0,0,0,0],[0,1,1,1,0],[0,1,1,1,0]])

sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())

z = y[1:,1:4].assign(x)
z.eval()

# returns
# array([[0, 0, 0, 0, 0],
#        [0, 1, 2, 3, 0],
#        [0, 4, 5, 6, 0]])

修改

动态相同(此处仅限位置)

import numpy as np
import tensorflow as tf

x = tf.constant([[1,2,3],[4,5,6]])
y = tf.Variable([[0,0,0,0,0],[0,1,1,1,0],[0,1,1,1,0]])

pos = tf.placeholder(tf.int32, shape=(2,))

sess = tf.InteractiveSession()
sess.run(tf.global_variables_initializer())

z = y[pos[0]:2+pos[0],pos[1]:3+pos[1]].assign(x)
z.eval({pos: [1,1]})