2017-08-04 3 views
1

私は2つのベクトルX = [a,b,c,d]Y = [m,n,o]を持っています。 、私は2 tf.while_loop()でこれを行うことができます想像XとYすなわちテンソルフローの2つのベクトルの要素の組み合わせから行列を作成する方法

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 

から各要素は、各ペアの操作である行列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] 

これはところで

答えて

0

私はランクを上げ、broadcastingを使用してこれを行う方法を発見したPythonのAPIを使用しています。これはそれを行うための最も効率的な方法であれば、私はまだわかりませんが、それは私が推測する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 
関連する問題