TensorFlow

时间:2018-06-01 07:09:38

标签: python tensorflow

我有以下任务:有两个向量 [v_1, ..., v_n][w_1, ..., w_n]构建了新的向量[v_1] * w_1 + ... + [v_n] * w_n

对于v = [0.5, 0.1, 0.7]w = [2, 3, 0]的例子,结果将为

[0.5, 0.5, 0.1, 0.1, 0.1]

如果使用vanilla python,解决方案将是

v, w = [...], [...]
res = []
for i in range(len(v)):
    res += [v[i]] * w[i]

是否可以在TensorFlow函数中构建此类代码?它似乎是tf.boolean_mask的扩展,附加参数如weightsrepeats

1 个答案:

答案 0 :(得分:1)

以下是使用tf.sequence_mask的简单解决方案:

import tensorflow as tf

v = tf.constant([0.5, 0.1, 0.7])
w = tf.constant([2, 3, 0])

m = tf.sequence_mask(w)
v2 = tf.tile(v[:, None], [1, tf.shape(m)[1]])
res = tf.boolean_mask(v2, m)

sess = tf.InteractiveSession()
print(res.eval())
# array([0.5, 0.5, 0.1, 0.1, 0.1], dtype=float32)