矩阵的每一行多由另一个矩阵的同一行而不是R中的循环

时间:2014-11-14 17:02:03

标签: r for-loop matrix

我试图通过R中的另一个矩阵中的每个对应行来对矩阵的每一行进行多次复制。我可以使用for循环来执行此操作但是它非常慢并且我尝试使用多个矩阵,每个矩阵180万行。

mat1 <- matrix(1:10, nrow=5, ncol=2)
mat2 <- matrix(1:5, nrow=5, ncol=2)

vect <- NA
for(i in 1:nrow(mat1)){
  vect[i] <-  sum(mat1[i, ] * t(mat2[i, ]))
}
vect

如果我使用矩阵乘法和向量

,它也有效
for(i in 1:nrow(mat1)){
  vect[i] <-  mat1[i, ] %*% as.vector(t(mat2[i, ]))
}

我尝试使用apply()函数,但它尝试将mat2的每一行mat1的每一行复用多次,我无法弄清楚如何在没有for()的情况下停止dplyr循环。

在这种情况下,速度和内存效率对我很重要。从理论上讲,我可以使用mat1,因为我从数据框中提取mat2vect,{{1}}可以作为附加列附加。同样,我无法弄清楚如何快速完成。

1 个答案:

答案 0 :(得分:0)

一位同事告诉我rowSums()功能,在这种情况下效果非常好。

m1 <- as.matrix(select(df[1:10, ], one_of(cov.list$site.ef)))
m2 <- as.matrix(t(select(df[1:10, ], one_of(names(B.site.wide[-1])))))

rowSums(m1 * m2)

它在不到一秒钟的时间里就可以处理我的180万行矩阵。