如何根据张量流中两个向量的元素组合创建矩阵

时间:2017-08-04 13:46:39

标签: python tensorflow

我有两个向量X = [a,b,c,d]Y = [m,n,o]。我想构造一个矩阵M,其中每个元素是从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()做到这一点,但这似乎效率低下,我想知道是否有更紧凑和并行的方式来做到这一点。

P.S。有一个轻微的复杂因素,X和Y实际上不是向量,而是R2。即,X和Y中的每个元素本身是固定长度的向量,并且f(X,Y)执行元素方式的f()。另外还有一个批处理组件。

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

1 个答案:

答案 0 :(得分: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