2014-11-14 103 views
0

我試圖通過在R中的另一個矩陣中的每個對應行的每個行的矩陣多行。我可以用for循環來做到這一點,但它非常慢,我試圖用多個矩陣來做到這一點,每個矩陣都是180萬行。矩陣的每一行乘以另一個矩陣的同一行,而沒有在R中的循環

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()功能嘗試,但它通過mat1各行設法多的mat2每一行,我不能弄清楚如何在沒有for()循環的情況下停止。

在這種情況下,速度和內存效率對我來說非常重要。理論上我可以使用dplyr,因爲我從數據框中拉取mat1mat2,並且可以將vect作爲附加列附加。再次,我不知道如何快速做到這一點。

回答

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萬行矩陣。

相關問題