布尔掩码Tensorflow,tf.boolean_mask - 维护原始张量的维度

时间:2018-05-21 09:18:32

标签: python tensorflow mask

我有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个维度。

如何在保持张量的原始尺寸的同时将张力蒙版应用于张量?

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]