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
的元素。你说得对。我现在看到了。