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

使用Numpy计算贝叶斯条件概率数组(无循环实现)

使用Numpy计算条件概率(无for循环)

条件概率 $P([x]_1=1 | Y=y)$ 的核心逻辑是:在Y等于y的样本集合中,统计$[x]_1$等于1的样本占比。我们可以通过Numpy的布尔索引直接筛选目标子集,再用np.mean或np.sum完成计算,完全不需要for循环。

实现代码

import numpy as np

# 定义输入数组
x1 = np.array([1, 0, 1, 0, 1])
Y = np.array([1, 1, 1, 1, -1])

# 计算 P([x]₁=1 | Y=1)
mask_y1 = Y == 1
p_x1_given_y1 = np.mean(x1[mask_y1] == 1)
# 等价写法(用sum计算):np.sum(x1[mask_y1] == 1) / np.sum(mask_y1)

# 计算 P([x]₁=1 | Y=-1)
mask_y_neg1 = Y == -1
p_x1_given_y_neg1 = np.mean(x1[mask_y_neg1] == 1)
# 等价写法:np.sum(x1[mask_y_neg1] == 1) / np.sum(mask_y_neg1)

print(f"P([x]₁=1|Y=1) = {p_x1_given_y1}")
print(f"P([x]₁=1|Y=-1) = {p_x1_given_y_neg1}")

代码解释

  1. 布尔掩码筛选:Y == 1会生成一个布尔数组,标记所有Y取值为1的样本位置,同理Y == -1标记Y取值为-1的位置。
  2. 子集提取:x1[mask_y1]会直接提取出Y=1对应的所有$[x]_1$值,得到数组[1, 0, 1, 0];x1[mask_y_neg1]提取出Y=-1对应的$[x]_1$值,得到数组[1]。
  3. 概率计算:np.mean(x1[mask] == 1)会将布尔值(True/False)自动转为1/0,计算均值即得到1的占比,也就是条件概率。用np.sum的写法则是直接统计符合条件的样本数,再除以Y=y的总样本数,逻辑完全一致。

运行代码后会输出预期结果:

P([x]₁=1|Y=1) = 0.5
P([x]₁=1|Y=-1) = 1.0

内容的提问来源于stack exchange,提问作者ML NewBie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:31:43