【发布时间】:2014-07-10 09:12:45
【问题描述】:
我最近一直在修改功率模拟,我有以下代码:
library(MASS)
library(Matrix)
simdat <- data.frame(mmm = rep(rep(factor(1:2,
labels=c("m1", "m2")),
each = 2),
times = 2800),
ttt = rep(factor(1:2,
labels = c("t1", "t2")),
times = 5600),
sss = rep(factor(1:70),
each = 160),
iii = rep(rep(factor(1:40),
each = 4),
times = 70))
beta <- c(1, 2)
X1 <- model.matrix(~ mmm,
data = simdat)
Z1 <- model.matrix(~ ttt,
data = simdat)
X1 和 Z1 是 11200x2 矩阵。在 Stackoverflow 的帮助下,我设法使我的计算比以前更有效率:
funab <- function(){
ran_sub <- mvrnorm(70, mu = c(0,0), Sigma = matrix(c(10, 3, 3, 2), ncol = 2))
ran_ite <- mvrnorm(40, mu = c(0,0), Sigma = matrix(c(10, 3, 3, 2), ncol = 2))
Mb <- as.vector(X1 %*% beta)
M1 <- rowSums(Z1 * ran_sub[rep(1:70,
each = 160),])
M2 <- rowSums(Z1 * ran_ite[rep(rep(1:40, each = 4),
times = 70),])
Mout <- Mb + M1 + M2
Y <- as.vector(Mout) + rnorm(length(Mout), mean = 0 , sd = 0.27)
}
Y 将是一个长度为11200 的向量。然后我多次复制这个函数(比如1000 次):
sim <- replicate(n = 1000,
expr = funab()},
simplify = FALSE)
sim 将是一个11200x1000 列表。鉴于我想更多地执行此操作并可能在funab() 中包含更多代码,我想知道在funab() 的计算中是否建议在funab() 中使用稀疏矩阵作为现在的@ 987654335@? /p>
【问题讨论】:
-
你熟悉
microbenchmark吗?您可以使用它来比较函数之间的性能,也就是。基准测试。简单地说,install.packages(c("microbenchmark"), dependencies = TRUE)、require(microbenchmark)和example(microbenchmark),你知道这个练习。我在this SO answer 中使用过microbenchmark。 -
直到现在我才知道。 :) 我今天会检查一下!
-
如果您确实进行了测试,将其添加到您的问题中会很有趣。
-
我会这样做的。我希望我这个周末能解决它!
标签: r matrix sparse-matrix