2011-12-11 584 views
-2

我正在研究一个模式识别项目,并且在那里我想用给定参数(均值和协方差矩阵)对二维正态分布进行采样。例如,如果我想从正态分布获得100个样本,我使用mvnrnd(mu,sigma,100),其中mu和sigma被假定为可用。但是mvnrnd会返回100个独特的样本,但我希望即使重复样本也能获得样本。 (我的意思是如何获得100个样本,但不一定具有唯一的值)我应该怎么做?如何在MATLAB中采样正态分布

+3

我什么也没看到,上面写着它生成独特样本的文档。 –

+4

此外,获取非唯一样本的概率恰好为零。 – dantswain

+2

@dantswain:有实数,是的,但没有固定精度浮点算术。 –

回答

0

检查出normrnd()函数。它生成正态分布的随机数。

要生成1-by-100向量的正态分布随机数的平均值为mu和标准差sigma,请使用以下语句。

X = normrnd(mu,sigma,[1 100]); 
+2

或者如果你没有Stats Toolbox,只需'sigma * randn(1,100)+ mu'。 –

+2

另外,这不会生成多元随机数(AFAICS)。 –

+0

@OliCharlesworth这应该是'sqrt(sigma)'(只适用于标量)。 – dantswain

1

它不,样品,保证是唯一的,但如果你的问题是在一个合理的方式提出那么这不应该是一个问题,反正在mvnrnd文档中的任何地方说。

无论哪种方式,如果你不快乐与mvnrnd,这应该是等价的:

% draw 100 samples from a 2D bivariate normal distribution with unit variance and zero mean: 
R = randn(2, 100); 
% scale by the square root (see http://en.wikipedia.org/wiki/Cholesky_decomposition) of sigma 
R1 = chol(sigma)*R; 
% offset by the mean 
R2 = bsxfun(@plus, R1, mu); 
+0

更正:MATLAB中的Cholesky分解返回上三角矩阵,因此在乘法中需要一个转置:R1 = CHOL(SIGMA)“* R' – Amro