如何用NumPy计算概率矩阵Y列边缘密度概率(MDP)并提取变量
概率分布计算相关问题解答
1. Y维度边缘密度概率(MDP)计算
边缘密度概率的核心逻辑是:对联合概率矩阵中不需要统计的维度做求和,消去非目标维度。
本题中矩阵行对应X取值、列对应Y取值,要得到Y维度的MDP,只需要沿着X所在的行方向(axis=0)对所有概率值求和,即可得到每个Y取值对应的边缘概率:
import numpy as np # 沿行方向求和,输出长度为9的数组,依次对应Y每个取值的边缘概率 y_mdp = P.sum(axis=0) # 校验:所有Y的边缘概率求和应为1(浮点计算可能存在极小误差) print(y_mdp.sum())
针对给出的P矩阵,计算得到的Y维度MDP结果为:
array([0.14914347, 0.14973252, 0.09144527, 0.09563304, 0.09230073, 0.15128076, 0.05914682, 0.09709805, 0.11421933])
2. NumPy行、列数据选取赋值
完全可以通过NumPy原生切片语法直接选取矩阵的行、列数据完成赋值,不需要额外依赖:
- 行数据(X维度)选取:NumPy默认第一个维度为行维度,直接通过单轴索引即可选取对应行,省略列索引时默认取该行所有列的值
- 列数据(Y维度)选取:通过
:选通所有行,再指定列索引即可选取对应列
示例代码如下:
# 直接将所有行数据赋值给X,X的每一行对应X一个固定取值下的全量联合概率 X = P # 将所有列数据赋值给Y,这里通过转置让Y的行对应原矩阵的列(即Y的取值),和X的存储逻辑对齐 Y = P.T # 单条行/列选取示例 x_2 = P[2] # 取X第3个取值(索引从0开始)对应的概率分布 y_5 = P[:, 5] # 取Y第6个取值对应的概率分布
补充说明:之前调用
np.cov(P)得到5×5协方差矩阵,是因为np.cov默认参数rowvar=True,即把每一行识别为一个随机变量,刚好匹配X的维度;如果需要计算Y维度的协方差矩阵,只需要传入np.cov(P, rowvar=False)即可得到9×9的Y维度协方差结果,不需要手动转置矩阵。
内容的提问来源于stack exchange,提问作者blacklion
相关产品推荐
相关产品推荐

