Tensorflow矩阵操作

时间:2018-10-26 16:30:48

标签: tensorflow

我在矩阵下方

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很复杂,并最终导致其他问题。任何人都可以通过其他方法来做到这一点?

谢谢!

1 个答案:

答案 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]