我有以下任务:有两个向量
[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的扩展,附加参数如weights
或repeats
。
答案 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)