2017-10-08 101 views
1

比方說,我有兩個張量ab具有相同的形狀。我想按照b中指定的次數重複a的元素。我如何在Tensorflow中實現這一點?Tensorflow用數字在另一張量,類似的重複張量numpy.repeat

在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) 

是不是有什麼更好的辦法?

+0

@Psidom當你要重複了''在恆定的次數回答的作品。我想要的是基於另一個張量「b」中元素的值重複「a」的元素。 – CentAu

+0

你說得對。我現在看到它。 – Psidom

回答

0

我認爲可以找到一個稍好的解決方案here,它使用tf.while(而不是Python for循環)來實現你想要的。該解決方案特別是重複tf.range元素,但我認爲你可以改變這種爲任意輸入張量工作。

FWIW有一個open issue on the TensorFlow github repo要價僅僅只是這個實現(這是我找到了一個鏈接到上面的代碼)。