矩阵的每一行与R中的另一个矩阵的交叉乘积

时间:2013-03-02 05:08:35

标签: r matrix multiplication

Suppose I have a matrix

A =

      [1, 2, 3;
       4, 5, 6;
       7, 8, 9;
       8, 7, 6];

我想要A的每一行和另一个矩阵B的叉积,其中

B =

      [1, 0.5, 0.5;
       0.5, 1, 0.5;
       0.5, 0.5, 1];

for循环可以写成,

for(i in 1:4)
{
      t(A[i,])%*%B;
}

在不使用for循环的情况下,是否有更优化的方法?

3 个答案:

答案 0 :(得分:3)

以下三个解决方案是等效的,并提供相同的结果;但是它们的性能不同。我确实在10000次迭代循环中运行它们来比较它们的平均性能,结果如下:

1 -

for(i in 1:4)
{
  t(A[i,])%*%B;
}

时间:0.46

2-

apply(A,1,crossprod,B)

时间:0.58

3-

t(A %*% B)

t(tcrossprod(A,B))

时间:0.08

答案 1 :(得分:1)

不是更优化,但看起来更好,

apply(A,1,crossprod,B)

答案 2 :(得分:1)

R具有内置功能:

    A %*% B
    #      [,1] [,2] [,3]
    # [1,]  3.5    4  4.5
    # [2,]  9.5   10 10.5
    # [3,] 15.5   16 16.5
    # [4,] 14.5   14 13.5