有人可以为我提供此代码/函数的数学表达式,作为生成排序 随机数的快速方法:
rsunif <- function(n) { n1 <- n+1
cE <- cumsum(rexp(n1)); cE[seq_len(n)]/cE[n1] }
有人可以为我提供此代码/函数的数学表达式,作为生成排序 随机数的快速方法:
rsunif <- function(n) { n1 <- n+1
cE <- cumsum(rexp(n1)); cE[seq_len(n)]/cE[n1] }
R 代码意味着返回 并且结果来自检查累积之间的差异的顺序统计之间的差异相同的分布。这在模拟圣经 Devroye 的非均匀随机变量生成(1986, pp. 207-219) 中有所描述和确立:
以及最近邻法的 Biau 和 Devroye 讲座(pp.5-7)
运行测试以将此间距方法与统一变量的直接排序进行比较,表明这种方法具有明显的优势(对于 n=100 和 10⁷ 复制,使用 Rbenchmark工具)。
test replications elapsed relative user.self sys.self user.child
2 direct 1e7 355.213 4.722 355.112 0.024 0
1 spacings 1e7 75.221 1.000 75.208 0.000 0
尽管将增加到会降低增益:
test replications elapsed relative user.self sys.self user.child
2 direct 1e6 96.225 1.886 96.20 0 0
1 spacings 1e6 51.029 1.000 51.02 0 0