Python中如何从联合分布数组计算X变量的边缘概率分布
实现X变量边缘概率计算的Python方案
循环实现(匹配你当前的编写思路)
现有代码存在两处语法问题:
np.unique(X array)需修改为直接传入X数组变量,例如np.unique(X)for Ind in range(len(MargX):缺少右括号,需修改为for Ind in range(len(MargX)):
循环体逻辑可通过numpy布尔索引实现取值筛选和求和,完整可运行示例如下:
import numpy as np # 示例输入数据 X = np.array([3,7,4,7]) joint_prob = np.array([0.2, 0.3, 0.1, 0.4]) # 边缘概率计算逻辑 MargX = np.unique(X) MargXp = np.zeros(len(MargX)) for Ind in range(len(MargX)): current_x_val = MargX[Ind] # 筛选X等于当前值的位置,对应概率求和 MargXp[Ind] = joint_prob[X == current_x_val].sum() # 运行结果:MargX为[3 4 7],MargXp为[0.2 0.1 0.7],符合计算预期
更高效的内置方法实现(无需手动编写循环)
利用numpy内置的np.unique和np.bincount可以直接完成分组求和,代码更简洁,处理大规模数组时效率更高:
import numpy as np X = np.array([3,7,4,7]) joint_prob = np.array([0.2, 0.3, 0.1, 0.4]) MargX, inverse_idx = np.unique(X, return_inverse=True) MargXp = np.bincount(inverse_idx, weights=joint_prob)
后续需要计算Y变量的边缘概率时,只需将上述代码中的X数组替换为Y数组即可。
内容的提问来源于stack exchange,提问作者Oracality
相关产品推荐
相关产品推荐

