R:计算两个向量的“乘积”的最佳方式

时间:2010-06-14 13:21:34

标签: r

我们假设我有一个向量

r <- rnorm(4)

和尺寸为20000 * 200的矩阵W,例如:

W <- matrix(rnorm(20000*200),20000,200)

我想计算尺寸为5000 * 200的新矩阵M,以便m11 <- r%*%W[1:4,1]m21 <- r%*%W[5:8,1]m12 <- r%*%W[1:4,2]等(即将行分组为4 x 4)并计算产品。)

这样做的最佳(速度,记忆)方式是什么?

提前致谢。

3 个答案:

答案 0 :(得分:6)

这似乎对我来说最快:

array(r %*% array(W, c(4, 20000 * 200 / 4)), c(5000, 200))

答案 1 :(得分:3)

我首先想到的是apply更短的昏暗:

M <- apply(W, 2, function(x) r%*%matrix(x,4,5000))

m11 <- r%*%W[1:4,1]
m21 <- r%*%W[5:8,1]
m12 <- r%*%W[1:4,2]

m11 - M[1,1]
#      [,1]
# [1,]    0
m21 - M[2,1]
#      [,1]
# [1,]    0
m12 - M[1,2]

#      [,1]
# [1,]    0

描述kohske answer

M <- apply(array(W,c(4,5000,200)), 3, function(x) r%*%x)

迭代更短的暗淡(再次)。

答案 2 :(得分:2)

我不知道这在速度或记忆方面是否是最佳的,但可能是一种简单的方法:

m<-apply(array(W,c(4,5000,200)),c(2,3),"%*%",r)


> m[1,1:10]==r%*%W[1:4,1:10]
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE  TRUE
> m[2,1:10]==r%*%W[5:8,1:10]
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE  TRUE