Python 如何对张量应用遮罩并保持其原始形状

Python 如何对张量应用遮罩并保持其原始形状,python,tensorflow,Python,Tensorflow,我有两个张量:一个包含数据,另一个包含布尔值。如果布尔值为False,我想将数据张量中的所有值设置为零,同时保持数据张量的原始形状。 到目前为止,我只能在mask是numpy数组时实现它 因为它影响张量的形状,所以我不能使用它 怎么做 import numpy as np import tensorflow as tf tf.enable_eager_execution() # create dummy data data_np = np.ones((4,2,3)) mask_np = np.

我有两个张量:一个包含数据,另一个包含布尔值。如果布尔值为False,我想将数据张量中的所有值设置为零,同时保持数据张量的原始形状。 到目前为止,我只能在mask是numpy数组时实现它

因为它影响张量的形状,所以我不能使用它

怎么做

import numpy as np
import tensorflow as tf
tf.enable_eager_execution()

# create dummy data
data_np = np.ones((4,2,3))
mask_np = np.array([[True, True],[False, True],[True, True],[False, False]])

# prepare tensors
data = tf.convert_to_tensor(data_np)
mask = tf.convert_to_tensor(mask_np)

# how to perform the same while avoiding numpy?
mask = np.expand_dims(mask, -1)
data *= mask
使用
tf.cast()
tf.expand_dims()

将tensorflow导入为tf
将numpy作为np导入
掩码\u np=np.array([[True,True],[False,True],[True,True],[False,False]]
数据=np.one((4,2,3))
mask=tf.convert\u to\u tensor(mask\u np,dtype=tf.bool)
mask=tf.expand_dims(tf.cast(mask,dtype=tf.float32),axis=len(mask.shape))
data=tf.convert\u to\u tensor(data\u np,dtype=tf.float32)
结果=掩码*数据
打印(result.numpy())
# [[[1. 1. 1.]
#   [1. 1. 1.]]
# 
#  [[0. 0. 0.]
#   [1. 1. 1.]]
# 
#  [[1. 1. 1.]
#   [1. 1. 1.]]
# 
#  [[0. 0. 0.]
#   [0. 0. 0.]]]

您的预期输出是什么?您希望掩码和数据之间的元素级乘法如何执行?