平铺一个张量因此我在TensorFlow

时间:2018-04-17 03:04:38

标签: tensorflow

我想要一种可以将[1,2,3]变成[1,1,2,2,3,3]的方法。

我的想法就像是

val = tf.constant([1.,2.,3.]) #1,2,3
tiled = tf.tile(val, 2) # [1,2,3,1,2,3]
reshaped = tf.reshape(2,3) # [[1,2,3], [1,2,3]]
transposed = tf.transpose(reshaped) # [[1,1], [2,2], [3,3]]
flattened = tf.reshape(transposed, (6,)) # [1,1,2,2,3,3]

我还没有对上述内容进行过测试,但它看起来应该可行。但是,有更清洁的方法吗?我看起来很难看。

动机是制作某种GMM,我可以得到一个20维的向量,它是两个10维正态分布的串联,每个向量乘以不同的随机变量。因此,如果有不同的方法,我也很感兴趣。提前谢谢。

1 个答案:

答案 0 :(得分:1)

一个没有tf.transpose的替代方案,基本上会在第二个轴上为张量添加第二个维度tile,然后将其展平:

t = tf.expand_dims(val, 1)
t = tf.tile(t, (1, 2))
t = tf.reshape(t, (-1,))

t.eval()
# array([ 1.,  1.,  2.,  2.,  3.,  3.], dtype=float32)