2

假设n = N(0,1)是正态分布。在 MATLAB 中,使用该randn(1,1)函数时,会从n.

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

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

while sample > mean
    sample from gaussian
end

但是,由于我必须在我的代码中提取大量样本,因此该解决方案将不受欢迎。有没有更聪明的方法来提取这些样本,而不涉及循环?

4

1 回答 1

4

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

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

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

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

sample(sample < mean(sample)) = -sample(sample < mean(sample)) + 2*mean(sample);
于 2013-04-26T09:09:24.023 回答