【问题标题】:clean method to generate random discrete distributions in matlab在matlab中生成随机离散分布的清洁方法
【发布时间】:2014-08-23 23:36:07
【问题描述】:

我经常需要在 matlab 中生成任意离散分布。我可以这样写:

randDiscreteDistribution = rand(sizeOfDistribution, 1);
randDiscreteDistribution = randDiscreteDistribution / sum(randDiscreteDistribution);

虽然我想避免在任何地方都写这两行,但封装这个功能会使软件更简洁。出于源代码控制的原因,我想避免编写一个完整的函数,我需要在多个存储库中使用它,它当然不值得拥有自己的子模块!

理想情况下,我想要一个类似于匿名函数的解决方案(本地函数已被淘汰,因为它们不允许在脚本中使用),尽管每次需要时我都会使用这两条丑陋的行而不是破解围绕一些执行速度较慢的东西: (http://www.mathworks.com/matlabcentral/answers/50195-is-it-possible-to-write-several-statements-into-an-anonymous-function)。

【问题讨论】:

  • 一个早期的解决方案...但是 3 个匿名函数可能有点慢:vectorAndSum = @(vector) [vector;总和(向量)]; divideByLast = @(vector) vector(1:end-1)/vector(end); randDistribution = @(size)divideByLast(vectorAndSum(rand(size,1))));'

标签: matlab probability probability-density


【解决方案1】:

您可以通过这种方式将其缩减为一行:

randDiscreteDistribution  = diff([0; sort(rand(sizeOfDistribution-1, 1)); 1]);

不是通过除法归一化为1,而是在单位区间内取sizeOfDistribution-1个点,然后使用获得的子区间的长度作为分布值。这些长度会自动归一化。

使用这种方法,获得的randDiscreteDistribution 值的分布与您原始代码中的分布不同。但也许这并不重要? (使用您的代码,randDiscreteDistribution 值无论如何都不统一)。

【讨论】:

    猜你喜欢
    • 2012-04-21
    • 2011-05-11
    • 2011-01-13
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2015-03-22
    相关资源
    最近更新 更多