我有一个矩阵 z (3 x 20000)。将每一行视为一个随机变量,将每一列视为一个模拟。我使用 apply 命令在R中编写了以下函数,以查找 3 维的经验累积分布函数 (EMP.CDF)。此 k 变量经验 CDF 在此 pdf第 2 页 的“多元 ECDF”部分下进行了解释。
EMP.CDF=function(z) {
# z is a matrix (3 x 20000) and each row is a realization of a random variable
q1=z[1,];q2=z[2,];q3=z[3,]
# qi = the realization of the ith random variable, i=1,2,3
# Now I am going to evaluate the empirical cumulative distribution function at
# each column of z
# Given each column, the function should return an empirical
# cumulative probability.
d=apply(z,2, function(x) sum(q1<=x[1] & q2<=x[2] & q3<=x[3])/(length(q1)))
return(d)}
> z=matrix(0,3,20000)
> z[1,]=runif(20000,1,2)
> z[2,]=runif(20000,3,5)
> z[3,]=runif(20000,7,9)
> system.time(EMP.CDF(z))
user system elapsed
30.18 0.01 30.39
在上面的代码中 k=3。有什么方法可以对上述函数进行矢量化以减少系统时间?