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

如何生成第i分量方差为1/i的d维n个零期望高斯样本矩阵

实现原理

零均值独立高斯变量的方差可以通过缩放调整:若X服从标准正态分布(均值0、方差1),那么a*X服从均值0、方差为a²的正态分布。你要求第i个分量的方差为1/i,因此只需要将对应维度的标准正态样本乘以1/√i即可,逐分量缩放不会破坏变量间的独立性,完全符合你的需求。

实现步骤
  • 使用rng.standard_normal(size=(n, d))生成形状为(n,d)的标准正态样本矩阵,此时所有分量均为独立的标准正态分布
  • 生成长度为d的缩放系数数组,1-based索引的第i个位置对应值为1/√i,Python中可以用1 / np.sqrt(np.arange(1, d+1))直接生成
  • 利用numpy的广播机制,将标准正态矩阵和缩放系数数组直接相乘,即可自动按列完成缩放
  • 返回最终的样本矩阵即可
可运行代码示例
import numpy as np

def generate_gaussian_samples(n: int, d: int, seed: int = None):
    # 初始化随机数生成器,指定seed可固定结果方便复现
    rng = np.random.default_rng(seed)
    # 生成标准正态样本
    std_samples = rng.standard_normal(size=(n, d))
    # 生成各维度缩放系数
    scale_arr = 1 / np.sqrt(np.arange(1, d + 1, dtype=np.float64))
    # 按列缩放得到目标样本
    return std_samples * scale_arr
结果验证

你可以用以下代码验证生成的样本是否符合要求:

# 生成10万样本、5维测试,样本量越大统计结果越接近理论值
test_samples = generate_gaussian_samples(n=100000, d=5, seed=42)
print("各维度均值(理论值全为0):", test_samples.mean(axis=0).round(4))
print("各维度方差(理论值为1, 0.5, 0.3333, 0.25, 0.2):", test_samples.var(axis=0).round(4))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:18:02