如何使用TensorFlow计算布尔张量中全True矩阵及行的占比
TensorFlow张量运算实现方案
全程使用原生TensorFlow算子,无CPU数据搬运、无遍历操作,可直接在GPU/TPU上运行,性能最优。
1. 核心实现代码
import tensorflow as tf # 输入张量(样例) input_tensor = tf.constant([ [[[ True, True, True, True, True], [False, True, False, True, True], [False, True, False, True, True], [ True, True, True, True, True], [ True, True, True, True, True]]], [[[ True, True, True, True, False], [False, True, True, True, True], [False, True, False, True, True], [ True, True, True, True, True], [ True, False, True, True, True]]], [[[ True, True, True, True, True], [False, True, False, True, True], [False, True, True, True, True], [ True, False, True, False, True], [ True, True, True, True, True]]], [[[ True, True, True, True, True], [ True, True, True, True, True], [ True, True, True, True, True], [ True, True, True, True, True], [ True, True, True, True, True]]], [[[ True, True, True, True, True], [ True, True, True, True, True], [ True, True, True, True, True], [ True, True, True, True, True], [ True, True, True, True, True]]], ]) # 计算全True矩阵占比 ## 对最后两个维度(5x5矩阵)做全True判断 all_true_mat_mask = tf.reduce_all(input_tensor, axis=(-2, -1)) all_true_mat_ratio = tf.reduce_mean(tf.cast(all_true_mat_mask, tf.float32)) # 计算全True行占比 ## 对最后一个维度(行内元素)做全True判断 all_true_row_mask = tf.reduce_all(input_tensor, axis=-1) all_true_row_ratio = tf.reduce_mean(tf.cast(all_true_row_mask, tf.float32)) # 打印结果(样例输出:0.4, 0.64) print(all_true_mat_ratio.numpy()) print(all_true_row_ratio.numpy())
2. 实现说明
- 全矩阵判断:通过
tf.reduce_all指定轴为最后两维,直接批量判断每个5x5矩阵是否所有元素为True,用tf.reduce_mean直接计算占比,无需手动统计总数 - 全行判断:通过
tf.reduce_all指定轴为最后一维,批量判断每行是否所有元素为True,同样用tf.reduce_mean直接计算占比 - 无需手动
squeeze删除单维度轴,代码兼容任意前置维度的输入张量,鲁棒性更强
内容的提问来源于stack exchange,提问作者rishikesh fulari
相关产品推荐
相关产品推荐

