首页 文章

来自半高斯分布的样本

提问于
浏览
2

假设 n = N(0,1) 是正态分布 . 在MATLAB中,当使用 randn(1,1) 函数时,将从 n 中提取样本 .

但是,我有一个不同的目标:我想从上半部分(或下半部分)中取样,即从左尾部到平均部分(或从平均到右尾部分)的一半 .

这样做的一种虚拟方式是:

while sample > mean
    sample from gaussian
end

但是,由于我必须在我的代码中提取大量样本,因此不会理解此解决方案 . 是否有更智能的方法来提取这些样本,而不涉及循环?

1 回答

  • 4

    鉴于你的高斯在零附近是对称的,你可以使用

    sample = randn(n, 1); 
    sample(sample < 0) = -sample(sample < 0);
    

    请注意,这只适用于高斯平均值为零的情况 .

    对于具有任意方式的高斯,您可以使用:

    sample(sample < mean(sample)) = -sample(sample < mean(sample)) + 2*mean(sample);
    

相关问题