我有1d tensor
和1d长度相同的Booleans
数组。
我想使用布尔数组作为张量上的掩码,这样True将原始元素值保留在张量中,而False将张量中的原始元素值设置为零。
E.g。
Tensor = [1,2,3,4,5]
Array = [True, False, False, False, True]
将布尔蒙版应用于张量:
Desired result = [1, 0, 0, 0, 5]
Result with tf.boolean_mask = [1, 5]
我尝试使用tf.boolean_mask(tensor, array)
,但是,这会将结果张量的维度减少为仅包含True
个元素,在上面的示例中包含2个维度。
如何在保持张量的原始尺寸的同时将张力蒙版应用于张量?
答案 0 :(得分:3)
您可以使用tf.where
:
tf.where(array, tensor, tf.zeros_like(tensor))
答案 1 :(得分:1)
您可以将布尔蒙版投射到tf.int32
张量并使用tf.multiply
:
mask = tf.constant([True, False, False, False, True])
A = tf.range(1,6)
with tf.Session() as sess:
res = sess.run( \
tf.multiply(A, tf.cast(mask, tf.int32)) \
) # [1, 0, 0, 0, 5]