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

概率分布期望、E(X²)及方差计算代码报错排查求助

概率分布期望与方差计算报错排查与修正

报错原因

  1. 数据类型错误:CSV中P列的数值是分数格式的字符串(如1/8),读取后未转换为数值类型,numpy无法对字符串数组执行np.dot、np.sum等数值运算,触发TypeError: cannot perform reduce with flexible type。
  2. 逻辑错误:Step4中调用pd.crosstab(df['Observed'],df['Expected']),但数据集里不存在Observed和Expected列,属于无效代码。
  3. 冗余依赖:导入了chi2_contingency、seaborn、matplotlib等未使用的库,增加代码冗余。

修正后的完整代码

# program : expectation value
import pandas as pd
import numpy as np 
import logging 
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

# Step 1: 读取CSV并转换概率列的分数为数值
df = pd.read_csv('probability.csv')
# 将分数字符串转为浮点数
df['P'] = df['P'].apply(lambda x: eval(x) if isinstance(x, str) else x)
logging.debug(f"数据集:\n{df}")
logging.debug(f"X的数据类型: {df['X'].dtype}")
logging.debug(f"P的数据类型: {df['P'].dtype}")

# Step 2: 提取数值数组
X = df['X'].to_numpy()
p = df['P'].to_numpy()
logging.debug(f'X={X}')
logging.debug(f'p={p}')

# Step 3: 计算E(X)
logging.debug('Step 3: 计算E(X)')
# 概率和为1,直接用点积即可
expectation = np.dot(X, p)
logging.debug(f'E(X)={expectation}')

# Step 4: 计算E(X²)
logging.debug('Step 4: 计算E(X²)')
X_squared = X ** 2
expectation_x2 = np.dot(X_squared, p)
logging.debug(f'E(X²)={expectation_x2}')

# Step 5: 计算方差E((X-X_avg)²)
logging.debug('Step 5: 计算方差E((X-X_avg)²)')
# 方法1:直接按定义计算
variance = np.dot((X - expectation) ** 2, p)
# 方法2:用方差公式Var(X)=E(X²)-[E(X)]²验证
variance_alt = expectation_x2 - expectation ** 2
logging.debug(f'方差={variance}')
logging.debug(f'方差(公式验证)={variance_alt}')

关键修正点说明

  • 概率列转换:通过eval(x)将分数字符串转为浮点数,确保P列是数值类型。
  • 简化期望计算:由于概率分布的和为1,无需除以np.sum(p),直接使用np.dot(X, p)即可得到期望。
  • 正确实现E(X²):计算X的平方数组后,再与概率数组做内积。
  • 方差计算:提供两种计算方式,一种是直接按定义计算,另一种用方差公式Var(X)=E(X²)-[E(X)]²验证结果一致性。

运行结果

运行后会输出:

DEBUG:root:E(X)=16.0
DEBUG:root:E(X²)=276.0
DEBUG:root:方差=20.0
DEBUG:root:方差(公式验证)=20.0

与预期结果完全匹配。

内容的提问来源于stack exchange,提问作者Evan Gertis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:15:33