来自半高斯分布的样本

时间:2013-04-26 08:36:17

标签: matlab statistics distribution random-sample normal-distribution

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

然而,我有一个不同的目标:我想从上半部分(或下半部分)进行采样,即从左尾到平均(或从平均到右尾)的一半。

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

while sample > mean
    sample from gaussian
end

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

1 个答案:

答案 0 :(得分:4)

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

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

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

对于任意方式的高斯人,你可以使用:

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