You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于布尔矩阵分组计算Numpy矩阵行均值并统计符合条件行数

解决布尔矩阵对应浮点矩阵的均值统计问题

需求说明

给定N×N浮点矩阵A和同尺寸布尔矩阵B,完成以下操作:

  • 对每行,计算A中对应B为True的元素均值
  • 对每行,计算A中对应B为False的元素均值
  • 统计True均值 < False均值的行数

示例

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]]

统计过程:

  • 第1行:True均值=(1+2)/2=1.5,False均值=3.0 → 满足条件,计数+1
  • 第2行:True均值=6.0,False均值=(4+5)/2=4.5 → 不满足
  • 第3行:True均值=(7+9)/2=8.0,False均值=8.0 → 不满足
    最终计数结果为1

原代码问题

你之前的实现错误在于:计算均值时用了每行总元素数(N)做分母,而非对应布尔值的实际出现次数,导致均值计算偏差。

修正方案

无需保留中间均值变量,直接通过求和与计数的比值计算,并统计符合条件的行数:

import numpy as np

A = np.array([[1.0, 2.0, 3.0],
              [4.0, 5.0, 6.0],
              [7.0, 8.0, 9.0]])
B = np.array([[True, True, False],
              [False, False, True],
              [True, False, True]])

# 计算每行True对应元素的和与数量
true_sum = np.sum(A * B, axis=1)
true_count = np.sum(B, axis=1)

# 计算每行False对应元素的和与数量
false_sum = np.sum(A * ~B, axis=1)
false_count = np.sum(~B, axis=1)

# 计算均值(用np.divide避免除以0的极端情况)
true_mean = np.divide(true_sum, true_count, where=true_count != 0)
false_mean = np.divide(false_sum, false_count, where=false_count != 0)

# 统计符合条件的行数
count = np.sum(true_mean < false_mean)
print(count)  # 输出:1

关键说明

  • A * B会将B为False的位置置0,求和后得到每行True对应元素的总和
  • np.sum(B, axis=1)直接统计每行True的数量
  • np.divide的where参数用于处理某行全True/全False的极端情况(此时对应均值设为NaN,不会参与后续统计)

内容的提问来源于stack exchange,提问作者Beyond.Multiverse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:35:27