已知x和对应概率P(x)时如何使用Python计算标准差
离散概率分布标准差的Python实现
已知数据
你提供的x取值和对应概率如下:
| x | P(x) |
|---|---|
| -2000 | 0.1 |
| -1000 | 0.1 |
| 0 | 0.2 |
| 1000 | 0.2 |
| 2000 | 0.3 |
| 3000 | 0.1 |
实现逻辑
沿用你提到的计算逻辑:
方差公式:
Var(x) = E[x²] - (E[x])²
标准差为方差的算术平方根
其中E[x]是x的期望,等于所有x与对应P(x)乘积的总和;E[x²]是x平方的期望,等于所有x²与对应P(x)乘积的总和。
实现代码
方法1:纯Python实现(无需安装第三方库)
# 定义x取值和对应概率 x_values = [-2000, -1000, 0, 1000, 2000, 3000] p_values = [0.1, 0.1, 0.2, 0.2, 0.3, 0.1] # 计算期望E[x] e_x = sum(x * p for x, p in zip(x_values, p_values)) # 计算x平方的期望E[x²] e_x2 = sum(x**2 * p for x, p in zip(x_values, p_values)) # 计算方差 var_x = e_x2 - e_x ** 2 # 计算标准差 std_x = var_x ** 0.5 print(f"期望E[x]:{e_x}") print(f"方差Var(x):{var_x}") print(f"标准差:{std_x:.2f}")
运行输出结果:
期望E[x]:800.0 方差Var(x):2160000.0 标准差:1469.69
方法2:基于NumPy实现(适合大规模数据计算)
import numpy as np x_values = np.array([-2000, -1000, 0, 1000, 2000, 3000]) p_values = np.array([0.1, 0.1, 0.2, 0.2, 0.3, 0.1]) e_x = np.sum(x_values * p_values) e_x2 = np.sum(x_values ** 2 * p_values) var_x = e_x2 - e_x ** 2 std_x = np.sqrt(var_x) print(f"期望E[x]:{e_x}") print(f"方差Var(x):{var_x}") print(f"标准差:{std_x:.2f}")
运行结果和纯Python实现完全一致。
内容的提问来源于stack exchange,提问作者V R Babu
相关产品推荐
相关产品推荐

