Python 用形状(x,y)的二维布尔掩码屏蔽形状(x,y,z)的三维张量

Python 用形状(x,y)的二维布尔掩码屏蔽形状(x,y,z)的三维张量,python,tensorflow,Python,Tensorflow,我有以下形状(2,6,2)的张量,输出: 并具有以下布尔掩码张量,掩码的形状(2,6): 如何使用mask(或其调整)应用masked\u output=tf.boolean\u mask(output,masks),从而产生以下结果: [[[0.4 0.2] [0.7 0.5] [0.4 0.1] [0.0 0.0] [0.0 0.0] [0.0 0.0]] [[0.6 0.6] [0.3 0.5] [0.7 0.2] [0.8 0.1] [0.0 0.

我有以下形状(2,6,2)的张量,
输出

并具有以下布尔掩码张量,
掩码
的形状(2,6):

如何使用
mask
(或其调整)应用
masked\u output=tf.boolean\u mask(output,masks)
,从而产生以下结果:

[[[0.4 0.2]
  [0.7 0.5]
  [0.4 0.1]
  [0.0 0.0]
  [0.0 0.0]
  [0.0 0.0]]

 [[0.6 0.6]
  [0.3 0.5]
  [0.7 0.2]
  [0.8 0.1]
  [0.0 0.0]
  [0.0 0.0]]]
编辑

下面是一些变化,但这似乎仍然是一种混乱的做法。如有其他建议,我们将不胜感激

mask = tf.sequence_mask(lengths=[[3, 3], [4, 4]] maxlen=6)
mask = tf.transpose(mask, [0, 2, 1])

也许不是最有效的方法,但它确实有效

flat_mask = tf.reshape(mask, shape=(-1,))
expanded_flat_mask = tf.tile(flat_mask, [2])
expanded_mask = tf.reshape(expanded_flat_mask, shape=(2, 6, 2))
masked_output = tf.boolean_mask(output, expanded_mask)
或者

masked_output = output * tf.cast(tf.expand_dims(mask, axis=-1), output.dtype)

这会产生一个(2,6,1)张量,但是
tf。布尔掩码(输出,更大的掩码)
需要两者都是(2,6,2)你是对的。请参阅更新的解决方案。我找不到更直接的方法来做这件事。@KOB还添加了一个看起来更简单的替代解决方案。
flat_mask = tf.reshape(mask, shape=(-1,))
expanded_flat_mask = tf.tile(flat_mask, [2])
expanded_mask = tf.reshape(expanded_flat_mask, shape=(2, 6, 2))
masked_output = tf.boolean_mask(output, expanded_mask)
masked_output = output * tf.cast(tf.expand_dims(mask, axis=-1), output.dtype)