我有一个问题基本上是以下matlab问题的向量化R解决方案:
Generate random number with given probability matlab
我能够根据随机统一数字和每个单一事件的给定概率生成随机事件结果(总和为100% - 只发生一个事件):
sum(runif(1,0,1) >= cumsum(wdOff))
然而,该函数只接受一个随机统一数字,而我希望它采用随机统一数字的向量并输出这些条目的相应事件。
所以基本上我正在寻找在matlab中从Oleg的矢量化解决方案的R解决方案(从评论到matlab解决方案):
“矢量化解决方案:sum(bsxfun(@ge, r, cumsum([0, prob]),2)
其中r
是列向量,prob
是行向量。 - Oleg”
告诉我您是否需要更多信息。
答案 0 :(得分:8)
你可以做一个加权随机样本,而不用担心你的cumsum方法:
sample(c(1, 2, 3), size = 100, replace = TRUE, prob = c(0.5, 0.1, 0.4))
如果您已有号码,也可以这样做:
x <- runif(10, 0, 1)
as.numeric(cut(x, breaks = c(0, 0.5, 0.6, 1)))