我想要一种可以将[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维正态分布的串联,每个向量乘以不同的随机变量。因此,如果有不同的方法,我也很感兴趣。提前谢谢。
答案 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)