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

Python Tensorflow用另一个张量中的数字重复一个张量,类似于numpy.repeat,python,tensorflow,Python,Tensorflow,假设我有两个形状相同的张量a和b。我想准确地按照b中指定的次数重复a的元素。如何在Tensorflow中实现这一点 在numpy中,我会使用np。重复: 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.ti

假设我有两个形状相同的张量
a
b
。我想准确地按照
b
中指定的次数重复
a
的元素。如何在Tensorflow中实现这一点

在numpy中,我会使用
np。重复

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)

没有更好的方法吗?

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


FWIW有一个请求就是这个实现(我在这里找到了指向上述代码的链接)。

@Psidom当你想重复
a
一定次数时,这个答案就起作用了。我想要的是根据另一个张量
b
中元素的值来重复
a
的元素。你说得对。我现在看到了。