假设n = N(0,1)
是正态分布。在MATLAB中,当使用randn(1,1)
函数时,将从n
中提取样本。
然而,我有一个不同的目标:我想从上半部分(或下半部分)进行采样,即从左尾到平均(或从平均到右尾)的一半。
这样做的一种虚拟方法是:
while sample > mean
sample from gaussian
end
但是,由于我必须在我的代码中提取大量样本,因此不会理解此解决方案。是否有更智能的方法来提取这些样本,而不涉及循环?
答案 0 :(得分:4)
鉴于您的高斯在零附近是对称的,您可以使用
sample = randn(n, 1);
sample(sample < 0) = -sample(sample < 0);
请注意,这只适用于高斯平均值为零的情况。
对于任意方式的高斯人,你可以使用:
sample(sample < mean(sample)) = -sample(sample < mean(sample)) + 2*mean(sample);