2017-08-04 192 views
1

我有兩個向量X = [a,b,c,d]Y = [m,n,o]。我想從X和Y即如何從張量流中兩個向量的元素組合創建矩陣

M[j,i] = f(X[i], Y[j]) 

# e.g. where f(x,y) = x-y: 
M := 
    a-m  b-m  c-m  d-m 
    a-n  b-n  c-n  d-n 
    a-o  b-o  c-o  d-o 

我想我可以具有兩個tf.while_loop()執行此構造的矩陣M,其中每個元素是在每對的操作,但是,似乎效率低下,我想知道是否有更緊湊和平行的方式來做到這一點。

P.S. X和Y實際上並不是矢量,而是R2。即X和Y中的每個元素本身就是一個固定長度的向量,並且f(X,Y)元素地執行f()。另外還有一個批處理組件。

I.e.

X.shape => [BATCH, I, K] 
Y.shape => [BATCH, J, K] 
M[batch, j, i, k] = f(X[batch, i, k], Y[batch, j, k]) 
        # e.g.: 
        = X[batch, i, k] - Y[batch, j, k] 

這是使用Python API BTW

回答

0

我發現通過增加級別和使用broadcasting這樣做的方式。我仍然不知道這是否是最有效的方式,但這比使用tf.while_loop好得多!我仍然樂於接受建議/改進。

X_expand = tf.expand_dims(X, 1) 
Y_expand = tf.expand_dims(Y, 2) 
# now I think M = f(X,Y) will broadcast each tensor to the higher dimension on each axis duplicating the data e.g.: 
M = X-Y 
相關問題