3

如何从与原始列表具有相同均值和标准差的随机数生成新列表?

我试过 newlist = mean(list) + std(list)*randn(100,1); 我在 Matlab 网站上找到了它,但它生成的标准和平均值与原来的略有不同,因为新的平均值总是更大。

4

2 回答 2

2

诀窍是生成均值为 0 且标准偏差为 1 的随机数。我们通过生成任何旧的随机数来做到这一点,然后再修正均值和标准差。

% generate your random numbers
r = randn(100, 1);

% scale the variance
r2 = r / std(r);

% shift the mean
r3 = r2 - mean(r2);

%check your answer
abs(mean(r3)) < sqrt(eps)
abs(std(r3) - 1) < sqrt(eps)

现在newlist = mean(list) + std(list) * r3应该给你你需要的。

于 2011-04-15T12:41:13.203 回答
0

很抱歉用问题来回答问题,但我必须问...

为什么需要确保随机数向量的平均值与原始向量完全相同?同样,为什么标准差需要完全相同?

如果我运行蒙特卡罗模拟或类似的,我试图发现可能发生的事情。如果您调整随机数,使平均值正好是 X,标准差正好是 Y,那么您的模拟将包含极端事件的机会就会减少。反过来,这意味着出现问题的可能性较小。

这些类型的转换作为学术练习很好,但是,我非常担心在现实世界中采用这种类型的方法。

  1. 您正在破坏模拟的全部目的
  2. 如果您的方法非常敏感以至于它们不起作用,那么平均值和标准偏差会偏离任意小量,这本身就应该告诉您一些事情
于 2011-04-15T16:35:24.100 回答