我试图通过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
,因为我从数据框中提取mat2
和vect
,{{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万行矩阵。