【问题标题】:Taking mean of all rows in a numpy matrix grouped by values based on another numpy matrix取基于另一个 numpy 矩阵的值分组的 numpy 矩阵中所有行的平均值
【发布时间】:2022-11-29 15:48:52
【问题描述】:

我有一个大小为 NXN 的矩阵 A,带有浮点值和另一个大小为 NXN 的布尔矩阵 B

对于每一行,我需要找到 A 中属于索引的所有值的平均值,其中 True 是矩阵 B 中该索引的对应值

同样,我需要找到 A 中属于索引的所有值的平均值,其中 False 是矩阵 B 中该索引的对应值

最后,我需要找到“真”均值小于“假”均值的行数

例如 :

A = [[1.0, 2.0, 3.0]
     [4.0, 5.0, 6.0]
     [7.0, 8.0, 9.0]]

B = [[True, True, False]
     [False, False, True]
     [True, False, True]]

最初,计数 = 0

对于第 1 行,true_mean = 1.0+2.0 / 2 = 1.5 和 false_mean = 3.0
true_mean < false_mean,所以计数 = 0+1=1

对于第 2 行,true_mean = 6.0 和 false_mean = 4.0+5.0 / 2 = 4.5
true_mean > false_mean,所以计数保持不变

对于第 3 行,true_mean = 7.0+9.0 / 2 = 8.0 和 false_mean = 8.0
true_mean == false_mean,所以计数保持不变

最终计数值 = 1

我的尝试:-

true_mat = np.where(B, A, 0)
false_mat = np.where(B, 0, A)

true_mean = true_mat.mean(axis=1)
false_mean = false_mat.mean(axis=1)

但这实际上给出了错误的答案,因为分母不完全是该行中真/假值的数量,而是“N”

我只需要计数,不需要 true_mean 和 false_mean

无论如何要修复它?

【问题讨论】:

    标签: python arrays numpy tensorflow boolean


    【解决方案1】:

    平均问题可以通过计算mask来解决:

    mask_norm = tf.reduce_sum(tf.clip_by_value(true_mat, 0., 1.),axis=0)
    true_mean = tf.math.divide(tf.reduce_sum(true_mat, axis=1), mask_norm)
    #true_mean : [1.5, 6. , 8. ]
    

    【讨论】:

      猜你喜欢
      • 2015-05-31
      • 2021-07-24
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 2016-10-23
      • 2011-04-23
      • 1970-01-01
      相关资源
      最近更新 更多