Tensorflow在另一个张量中用数字重复张量,类似于numpy.repeat

时间:2017-10-08 22:44:27

标签: python tensorflow

我们说我有两个具有相同形状的张量ab。我想完全按照a中指定的次数重复b的元素。我怎样才能在Tensorflow中实现这一目标?

在numpy中,我使用np.repeat

import numpy as np
a = np.array([0.5,0.1,0.15,0.25])
b = np.array([100,50,200,10])
c = np.repeat(a, b)

如何在tensorflow中执行此操作?

非常(肮脏且可能效率低下)的解决方法是将两者都拆分到列表中,并在每个元素上使用tf.tile,然后concat结果。我设法做了这样的工作:

a = tf.constant([0.5,0.1,0.15,0.25])
b = tf.constant([3,1,5,2])
a_list = tf.unstack(a)
b_list = tf.unstack(b)
result = []
for i in range(len(a_list)):
    tmp = tf.tile([a_list[i]], [b_list[i]])
        result.append(tmp)
    final = tf.concat([*result], axis=0)

结果:

final.eval()
Out:
array([ 0.5       ,  0.5       ,  0.5       ,  0.5       ,  0.1       ,
        0.15000001,  0.15000001,  0.15000001,  0.25      ,  0.25      ], dtype=float32)

还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我认为可以找到一个更好的解决方案here,它使用tf.while(而不是Python for循环)来实现你想要的。此解决方案专门重复tf.range中的元素,但我认为您可以将其更改为适用于任意输入张量。

FWIW有一个open issue on the TensorFlow github repo要求这个实现(我找到了上面代码的链接)。