我有2个矩阵,比如说M和N的大小分别是m和n。我想创建一个大小为l乘以n的第三个矩阵,使得新矩阵的第(i,j)个条目是通过将M的第i列与N的第j列相乘得到的向量的总和。
例如:
M = matrix(1:16, 4,4)
> M
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
N = matrix(20:27,4,2)
> N
[,1] [,2]
[1,] 20 24
[2,] 21 25
[3,] 22 26
[4,] 23 27
因此,我的新矩阵的第(1,1)个元素是M乘以N中第一列的第一列的总和。在这种情况下
> M[,1] * N[,1]
[1] 20 42 66 92
> sum(M[,1] * N[,1])
[1] 220
我可以通过迭代l和n的所有可能值,使用2 For Loops轻松创建这个新矩阵。但是有更简单/更快的方法吗?
答案 0 :(得分:3)
两个向量的元素乘积之和称为内积。
矩阵乘法给出第一个矩阵中行的内积和第二个矩阵中的列。要获得两个矩阵的列的内积,您可以转置第一个矩阵(将行转换为列),然后使用矩阵乘法来获得所需的结果:
> t(M) %*% N
[,1] [,2]
[1,] 220 260
[2,] 564 668
[3,] 908 1076
[4,] 1252 1484