【问题标题】:Generating random numbers using randn in MATLAB在 MATLAB 中使用 randn 生成随机数
【发布时间】:2018-11-20 09:42:45
【问题描述】:

我在 MATLAB 中使用randn 为给定的均值和标准差生成一组随机数。

b=5000;
a=500;
y = a.*randn(100,1) + b;
sprintf('%f\n',y)

我预计生成的数字将介于 4500 到 5500 之间。但是,我看到的值在 3000 到 6000 之间。

有人能解释一下为什么会这样吗?

或者有什么方法可以指定值应该介于平均值加/减 1 SD 之间?

【问题讨论】:

  • 值不能全部位于平均值周围的正负 1SD 之间,因为标准差是对平均值周围数据的平均离散度的度量,您也需要该平均值是最大值。唯一可行的方法是使用一个分布,其中数字仅以相等的概率取值 (mean-sigma)(mean+sigma)y = a.*(2*(rand(100,1)<.5)-1)+b;
  • 将值强制为特定间隔的唯一方法是放弃高斯分布。你想要什么分布?截断高斯?
  • @LuisMendo 均值和标准差来自实验测量。由于数据点不可用,我正在尝试根据均值和标准差创建数据集。例如,测量可能与生物细胞的任何物理特性(如大小)有关。由于大多数自然现象遵循正态分布,我一直使用randn 进行采样。

标签: matlab random


【解决方案1】:

或者有什么方法可以指定值应该介于平均值加/减 1 SD 之间?

by definition.

如果你使用正态分布 (randn),那么你不能真正将你的数字限制在一个范围内,因为在正态分布中,只有无穷大和负无穷大的概率为零,其余的,虽然概率很小,但都可能发生。

或者,您可以使用不同的分布,例如均匀分布 (rand) 将随机性限制为间隙。

【讨论】:

  • 如果问题的隐含结尾是“......并且仍然保持正态分布”,就是这种情况。
【解决方案2】:

值不在区间[4500,5500] 中的原因是来自randn() 的数字并不局限于区间[-1,1],这就是为什么您的方法无法按您的意愿工作的原因,甚至尽管一般方法是有道理的。来自randn 的数字来自标准正态分布,其标准差为 1,均值为零。理论上,-inf+inf 之间的任何值都可以来自 randn。

你可以做以下两件事之一,这取决于你想做什么以及这如何限制你的选择:

选项 1 是在执行任何其他操作之前生成随机数并除以最大绝对值,即:

z = randn(100,1);
z = z / max(abs(z));
y = 5000 + 500*z;

这将确保z 不包含任何小于-1 或大于+1 的值(请注意,它确实保证其中至少一个(-1 或+1)将出现在数组中z)。然后,您可以使用 ba 的值将这些值转换为您选择的区间内的随机数。

编辑: 请注意(如本答案中的 cmets 所指出的),虽然上述选项会在您选择的区间内为您提供随机值,但它也会改变分布和标准差与这些值相关联。如果值服从正态分布对您很重要,请不要使用此选项。

选项 2 是使用 rand(),它始终返回区间 [0,1] 中的数字。请注意,这些来自均匀分布,而不是正态分布。然后您可以先将这些值转换为区间[-1,1]

z = rand(100,1);
z = 2*z - 1;      % Translates the interval from [0,1] to [-1,1]

然后像以前一样生成您的号码; y = 5000 + 500*z;.

【讨论】:

  • 我真的不推荐第一个选项,因为它使分布随机。如果 OP 真的想要一个有限的正态分布,我会推荐截断正态分布en.wikipedia.org/wiki/Truncated_normal_distribution
  • 截断会改变分布的标准差。这个问题说得不好:请求的标准是在截断之前还是之后计算?
  • 你说的都是对的;我将编辑我的答案以建议不要使用第一个选项。很遗憾 MatLab 没有内置截断的正态分布。有一个关于 mathworks 文件交换的文件,但看看 cmets,它可能也不应该使用。
  • @FlorisSA 平均值和标准偏差来自实验测量。由于数据点不可用,我正在尝试根据均值和标准差创建数据集。例如,测量可能与生物细胞的任何物理特性(如大小)有关。由于大多数自然现象都遵循正态分布,我一直使用randn 进行采样。鉴于此,使用截断正态分布是否合适?
  • 查看您的原始帖子和评论,我猜截断正态分布是最合适的,但这仍然会给您留下如何在 MatLab 中实际实现它的问题。无论哪种方式,您可能首先应该弄清楚 1)(所需的)标准偏差是多少,以及 2)与平均值的最大允许偏差是多少。正如 Brice 和 Ander 正确指出的那样,这些值不可能相同。
猜你喜欢
  • 2020-10-14
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多