tf.boolean_mask 的作用是 通过布尔值 过滤元素
def boolean_mask(tensor, mask, name="boolean_mask", axis=None):
"""Apply boolean mask to tensor.
tensor:被过滤的元素
mask:一堆 bool 值,它的维度不一定等于 tensor
return: mask 为 true 对应的 tensor 的元素
当 tensor 与 mask 维度一致时,return 值为一维
那么return值的维度是否有规律可循呢?是有的:
shape
有如下规则,假设 tensor.shape=(m,n,p,q),则
(1)当mask.shape=(m,n,p,q),结果返回(?,)
(2)当mask.shape=(m,n,p),结果返回(?,q),表示 q 维度没有过滤
(3)当mask.shape=(m,n),结果返回(?,p,q),p,q维度未被过滤
(4)当mask.shape=(m),结果返回(?,n,p,q),m维度被过滤
这个函数最大的特点就是无论哪种调用方式return值得shape都是动态的