回复 第1楼 的 bootstrap:
如果单纯是矩阵计算的话倒还好了,三条途径:
1、使用高性能的(并行)代数运算库;
2、使用稀疏矩阵包Matrix;
3、手动用sweep()函数求。
set.seed(123);<br />
A = matrix(rnorm(3000 * 3000), 3000);<br />
Bv = rnorm(3000);<br />
## Ordinary matrix (parallel gotoBLAS)<br />
B = diag(Bv);<br />
system.time(res1 <- A %*% B);<br />
# user system elapsed<br />
# 6.18 0.06 3.14<br />
rm(B);<br />
## Use Matrix package<br />
library(Matrix);<br />
B = Diagonal(x = Bv);<br />
system.time(res2 <- A %*% B);<br />
# user system elapsed<br />
# 2.28 0.40 2.68<br />
## Use sweep()<br />
system.time(res3 <- sweep(A, 2, Bv, "*"));<br />
# user system elapsed<br />
# 0.33 0.03 0.36 </p>
<p>max(abs(res1 - res2));<br />
# [1] 8.881784e-16<br />
max(abs(res1 - res3));<br />
# [1] 8.881784e-16<br />
max(abs(res2 - res3));<br />
# [1] 0<br />
</p>
P.S. 现在在那边主要做什么呢?[s:11]