2014-11-14 2 views
0

Я пытаюсь несколько строк каждой строки каждой соответствующей строки в другой матрице из R. Я могу сделать это с помощью цикла for, но это невероятно медленно, и я пытаюсь сделать это с помощью нескольких матриц, каждый из которых составляет 1,8 миллиона строк.Множество каждой строки матрицы одной строкой другой матрицы без цикла в 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(), но он пытается множественным каждую строку mat2 каждой строки mat1 и я не могу выяснить, как остановить это без петли for().

Скорость и эффективность памяти важны для меня в этом случае. В теории я мог бы использовать dplyr, потому что я тяну mat1 и mat2 из dataframe, а 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) 

Он работал над моими 1,8 миллионами матриц строк в течение секунды.

Смежные вопросы