1

我经常需要在 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)。

4

1 回答 1

0

您可以通过以下方式将其减少为一行:

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

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

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

于 2014-07-03T09:03:58.750 回答