【发布时间】:2014-03-07 19:06:29
【问题描述】:
我在R中有以下代码
library(mvtnorm)
m = matrix(rnorm(2000000),nrow=200)
A = matrix(rnorm(40000),ncol=200)
A = A%*%t(A)
C = array(A,c(200,200,10000))
B = 10000
S = 100
postpred = array(NA,c(200,S,B))
for(i in 1:B){
postpred[,,i] = t(rmvnorm(S,m[,i],C[,,i],method="svd"))
}
但是这段代码非常慢,因为我必须循环 10,000 次,同时还要从多元法线模拟 100 次,m 和 C 也可能非常大。所以我想做的是能够在循环之外计算postpred。我曾尝试使用 apply 功能,但无济于事。非常感谢任何帮助或建议。
【问题讨论】:
-
由于您在循环中对
rmvnorm的每次调用都采用不同的均值和协方差矩阵,因此您仍然需要调用该函数 10,000 次,无论您是否在循环或使用apply。由于您已经预先分配了postpred,我猜你不会通过切换到apply来获得那么多的加速。您的代码运行缓慢的原因可能是您试图从 10,000 个不同的多元正态分布中提取总共 2 亿个值。