【发布时间】:2018-09-11 10:38:43
【问题描述】:
我需要将两个大矩阵A 和B 相乘如下:
library(bigmemory)
library(bigalgebra)
library(biganalytics)
A <- big.matrix( replicate(100, rnorm(10^5)) )
B <- big.matrix( replicate(10^5, rnorm(100)) )
AB <- A %*% B
如何并行计算这个乘法?
目前我遇到的唯一教程是this one:
> library("doRedis")
> registerDoRedis(queue="example")
> L = foreach(j=1:2,.packages="VAM",.combine=c) %dopar%
+ {
+ key = paste("X",j,sep="")
+ ridx = ((j-1)*5 + 1):min((j*5),nrow(A))
+ X = A[ridx,] %*% B[,]
+ Y = as.big.matrix(X,backingfile=key)
+ vnew(Y, key)
+ key
+ }
> X = vam(matrix(L,nrow=2))
> sum(X[,] - A[,] %*% B[,])
[1] 0
但我不确定如何将其付诸实践。可能还有更简单/更有效的方法来实现相同的结果?
【问题讨论】:
-
不要尝试自己实现。有一些优化的并行矩阵库可以在 R 中使用。你有哪个操作系统?
-
@F.Privé 我有 Windows 10。
-
在 WIndows 上实现此目的的最简单方法是使用 Microsoft R Open。见the benchmarks。
-
@F.Privé 感谢您的建议,我对 Microsoft R Open 不熟悉。与 R 相比,使用它有什么主要缺点吗?
-
应该兼容。看看他们的网站。我认为在 RStduio 中,你甚至可以在 options 中选择你想使用的版本(R ou MRO)。
标签: r r-bigmemory