如何挑选一个值根据其概率

126(30天)
史蒂文
史蒂文 2011年12月7日
评论道: 真实用户2023年4月28日14:23
你好,
假设
P = (0.1 - 0.3 0.4 - 0.2)
X = [1 2 5 9]
P (n)的概率是选择X (n)的元素。我想做一个函数,选择一个“随机”的元素X根据其概率,等等
f = myfun (P, X)
> > f = 2(发生大约30%)
thx很多
4评论
PANTHAGADA ANIL KUMAR
PANTHAGADA ANIL KUMAR 2020年4月16日
如何选择一个元素至少probablility吗

登录置评。

接受的答案

肖恩·德Wolski
肖恩·德Wolski 2011年12月7日
f = X(找到(兰德< cumsum (P), 1,“第一”))
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2011年12月7日
答案在其他线程中照顾,以防cumsum (P) < 1可能发生由于舍入误差。

登录置评。

更多的答案(3)

乔纳森
乔纳森 2018年9月3日
编辑:乔纳森 2018年9月3日
接受的答案是不做任何检查,并对舍入误差很敏感。你应该使用 randsample 代替。
样本从X n个点,更换,和概率P:
randsample (X, n,真的,P)
这也可以使用一个定制的RandStream(参见文档)。注意,这个函数不检查- P值;如果需要手动检查。
4评论

登录置评。


史蒂文的主
史蒂文的主 2020年4月16日
您可以使用 离散化 (问这个问题的时候原来并不存在)。生成均匀随机数,本使用箱子的宽度是由P,和对每个本返回X的对应元素。
P = (0.1 - 0.3 0.4 - 0.2);
X = [1 2 5 9];
值=离散化(兰德(1,1 e4) cumsum (P [0]), X);
直方图(价值观,“归一化”,“概率”)
所示的概率 柱状图 应该同意相当密切值P。

Mendi
Mendi 2021年7月9日
最快的一个(100 ns - 200 ns):
函数[idx] = get_random_choice (p)
%的概率随机选择
%的例子:get_random_choice ((0.2, 0.7, 0.1))
N =长度(p);idx = 1;cump = 0;
r =兰德;
(idx < N)
cump = cump + p (idx);
如果(cump > r),打破,其他的,idx = idx + 1;结束
结束
结束

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!