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

如何仅使用标准正态随机值生成器生成多元正态分布?

多元正态分布正确实现方案

核心实现逻辑基于Cholesky分解,你的思路方向是对的,问题出在矩阵乘法的顺序和Cholesky分解结果的匹配上。numpy的np.linalg.cholesky返回的是下三角矩阵$L$,满足 $L @ L^T = 目标协方差矩阵$,你原有写法中直接用行向量格式的标准正态值点乘$L$,得到的协方差为$L^T @ L$,和目标协方差不符,所以生成结果不符合要求。

正确的实现代码如下(全程未使用numpy/scipy内置随机生成器,仅依赖你自定义的norm()标准正态随机值生成函数):

import numpy as np

# 目标分布参数
mu = np.array([1, 2])
cov = np.array([
    [1, 2],
    [2, 5]
])

# Cholesky分解得到下三角矩阵L
L = np.linalg.cholesky(cov)

# 生成40组2维独立标准正态样本
sample_count = 40
z = np.array([[norm() for _ in range(2)] for _ in range(sample_count)])

# 转换为目标多元正态样本
target_samples = z @ L.T + mu

你可以通过如下代码验证生成结果的正确性,样本量足够大时,生成样本的协方差会和目标协方差基本一致:

print("生成样本协方差:")
print(np.cov(target_samples.T))
print("目标协方差:")
print(cov)

如果偏好列存储样本的写法,也可以使用如下等价实现:

# 按列存储40组2维标准正态样本
z_col = np.array([
    [norm() for _ in range(sample_count)],
    [norm() for _ in range(sample_count)]
])
target_samples = (L @ z_col).T + mu

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:06:11