【发布时间】: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