我在矩阵下方
x = [x1, x2, x3
y1, y2, y3
z1, z2, z3
]
和另一个矩阵
y = [False, False, True, True, True, False, False, False
False, True, True, True, False, False, False, False
False, False, False,False,True, True, True, False
]
我想在新矩阵的下方创建一个矩阵,其中x用z填充z,用相同的方法用y填充True,否则用0填充。
z = [0, 0, x1, x2, x3, 0, 0, 0
0, x1, x2, x3, 0, 0, 0, 0
0, 0, 0, 0, x1, x2,x3,0
]
我能够做到
index = tf.cast(tf.where(y), tf.int32)
z = tf.sparse_to_dense(index, tf.shape(y), tf.reshape(x, [-1]))
但是,使用sparse_to_dense很复杂,并最终导致其他问题。任何人都可以通过其他方法来做到这一点?
谢谢!
答案 0 :(得分:0)
这将产生结果 tf.scatter_nd_update。
tf.tile
只需复制100 200 300
3次,以便可以在3个位置填充3个副本。
import tensorflow as tf
import numpy as np
x = [100, 200, 300,
1, 2, 3,
4, 5, 6
]
y = [False, False, True, True, True, False, False, False,
False, True, True, True, False, False, False, False,
False, False, False,False,True, True, True, False
]
x0 = tf.Variable( x )
y0 = tf.Variable( tf.cast( y, tf.int32 ))
with tf.Session() as sess :
sess.run(tf.initialize_all_variables())
indices = tf.constant( sess.run( tf.where( tf.equal(y0 , True )) ))
print(sess.run( tf.scatter_nd_update( y0,
indices,
tf.tile(x0[0:3], tf.constant([3])))))
输出是
[ 0 0 100 200 300 0 0 0 0 100 200 300 0 0 0 0 0 0
0 0 100 200 300 0]