首页 > 解决方案 > 如何将两个大矩阵乘以相应的列和行

问题描述

例如,我有两个矩阵:

> A
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

> B
     [,1] [,2]
[1,]    7   10
[2,]    8   11
[3,]    9   12

我想要一个名为 C 的向量,其元素 C[i]=A[i,]*B[,i],所以结果应该是:

> C
     [,1]
[1,]   76
[2,]  136

我使用了 for 循环for (i in 1:2) {C[i]=A[i,]%*%B[,i]}。但这很慢。而且我还尝试A%*%B在对角线上取元素,当矩阵很大时,它只会让我的电脑崩溃。你能给我一些建议吗?非常感谢!

标签: r

解决方案


直接乘法(不是矩阵乘法,而是逐元素乘法)可以满足我们的需求。这得到了我们想要的乘法 - 之后我们只想取行的总和。如果我们需要结果是列矩阵,我们可以转换为矩阵。

> A <- matrix(1:6, nrow = 2)
> A
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> B <- matrix(7:12, ncol = 2)
> B
     [,1] [,2]
[1,]    7   10
[2,]    8   11
[3,]    9   12
> rowSums(A * t(B))
[1]  76 136
> as.matrix(rowSums(A * t(B)))
     [,1]
[1,]   76
[2,]  136

推荐阅读