如何从与原始列表具有相同均值和标准差的随机数生成新列表?
我试过 newlist = mean(list) + std(list)*randn(100,1); 我在 Matlab 网站上找到了它,但它生成的标准和平均值与原来的略有不同,因为新的平均值总是更大。
诀窍是生成均值为 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
应该给你你需要的。
很抱歉用问题来回答问题,但我必须问...
为什么需要确保随机数向量的平均值与原始向量完全相同?同样,为什么标准差需要完全相同?
如果我运行蒙特卡罗模拟或类似的,我试图发现可能发生的事情。如果您调整随机数,使平均值正好是 X,标准差正好是 Y,那么您的模拟将包含极端事件的机会就会减少。反过来,这意味着出现问题的可能性较小。
这些类型的转换作为学术练习很好,但是,我非常担心在现实世界中采用这种类型的方法。