【问题标题】:Multiple each row of a matrix by the same row of another matrix without for loop in R将矩阵的每一行与另一个矩阵的同一行相乘,而R中没有for循环
【发布时间】:2014-11-14 17:02:02
【问题描述】:

我正在尝试将矩阵的每一行与 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,因为我正在从数据框中提取mat1mat2,而vect 可以作为附加列附加。再说一次,我不知道如何快速完成。

【问题讨论】:

    标签: r for-loop matrix


    【解决方案1】:

    一位同事告诉我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 万行矩阵。

    【讨论】:

      猜你喜欢
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      相关资源
      最近更新 更多