【问题标题】:R : Multiply 2 matrices column wise to create a third MatrixR:将 2 个矩阵逐列相乘以创建第三个矩阵
【发布时间】:2014-03-09 05:40:46
【问题描述】:

我有 2 个矩阵,分别是大小为 m x n 和 m x l 的 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 循环轻松创建这个新矩阵。但是有没有更简单/更快的方法呢?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    两个向量的元素乘积之和称为内积。

    矩阵乘法给出第一个矩阵中的行与第二个矩阵中的列的内积。要获得两个矩阵的列的内积,您可以转置第一个矩阵(将行转换为列),然后使用矩阵乘法来获得所需的结果:

    > t(M) %*% N
         [,1] [,2]
    [1,]  220  260
    [2,]  564  668
    [3,]  908 1076
    [4,] 1252 1484
    

    【讨论】:

    • 呃没有意识到它只是内在产品,谢谢!
    • 还有crossprod(M, N)
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多