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

如何正确对两个scipy multivariate_normal多元正态分布执行求和运算?

两个多元正态分布求和的实现方法

scipy 中 multivariate_normal 返回的是冻结分布实例,没有定义加法运算符,也不属于可迭代对象,因此直接使用 + 或者 sum() 运算都会触发类型错误。

核心原理

对于相互独立的多元正态分布,其和仍然服从多元正态分布,满足两个计算规则:

  • 结果的均值向量为两个分布的均值向量逐元素相加
  • 结果的协方差矩阵为两个分布的协方差矩阵逐元素相加

如果两个分布不相互独立,需要额外补充两个分布的交叉协方差矩阵,计算公式为 总协方差 = 分布0协方差 + 分布1协方差 + 交叉协方差 + 交叉协方差的转置,以下实现默认两个分布相互独立。

正确实现代码

from scipy.stats import multivariate_normal

# 定义原始的两个多元正态分布
Z0 = multivariate_normal([1,2], [[2,0],[0,2]])
Z1 = multivariate_normal([1.1,2.2], [[2.1,0],[0,4.1]])

# 分别提取均值和协方差相加得到和分布的参数
sum_mean = Z0.mean + Z1.mean
sum_cov = Z0.cov + Z1.cov

# 生成两个分布求和后的多元正态分布
Z = multivariate_normal(sum_mean, sum_cov)

结果验证

你可以通过采样的方式验证计算结果的正确性:

import numpy as np

# 各采样10000个点相加得到实际和的样本
sample_z0 = Z0.rvs(size=10000)
sample_z1 = Z1.rvs(size=10000)
sample_sum = sample_z0 + sample_z1

# 对比理论值和采样统计值
print("采样得到的和分布均值:", np.mean(sample_sum, axis=0))
print("理论计算的和分布均值:", sum_mean)
print("采样得到的和分布协方差:\n", np.cov(sample_sum, rowvar=False))
print("理论计算的和分布协方差:\n", sum_cov)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:07