我有一个问题,基本上是以下 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"
如果您需要更多信息,请告诉我。
最佳答案
你可以只做一个加权随机样本,而不用担心你的 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)))
关于r - 以给定的概率生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33015000/