我正在尝试模拟以下分布:
a | 0 | 1 | 7 | 11 | 13
-----------------------------------------
p(a) | 0.34 | 0.02 | 0.24 | 0.29 | 0.11
我已经模拟了一个类似的问题:四种球的机率分别为0.3,0.1,0.4和0.2。我创建了一个向量F = [0 0.3 0.4 0.8 1]
并使用repmat将其增长1000行。然后我将它与使用相同repmat
方法的5列增长的1000个随机数的列向量进行比较。我比较了这两个,计算了矩阵的求和器,并计算了得到频率的差值(例如[301 117 386 196]
)。 。
但是对于当前的分布,我不知道如何创建初始矩阵F
以及我是否可以使用我之前使用的相同方法。
我需要答案为“矢量化”,所以没有(for
,while
或if
)循环。
答案 0 :(得分:1)
如果您创建以下数组怎么办:
largeNumber = 1000000;
a=repmat( [0], 1, largeNumber*0.34 );
b=repmat( [1], 1, largeNumber*0.02 );
% ...
e=repmat( [13], 1, largeNumber*0.11 );
然后连接所有这些数组(获取一个数组,其中您的条目用相应的概率表示),将它们混合,并提取第一个N
元素以获得N
- 维从您的发行中抽取的矢量。
编辑:当然this回答是要走的路。