外部产品如何在R中运作?

时间:2017-02-28 15:34:05

标签: r matrix linear-algebra

作为尝试对循环进行矢量化的一部分,我偶然发现了outer(X, Y, FUN = "*", ...)中的R函数。

我试图了解如何逐步重现以下结果:

set.seed(1)
b = rnorm(3, 0, 1)
t = rnorm(5)

outer() FUN参数用作-我得到以下输出:

> outer(t, b, "-")
           [,1]       [,2]        [,3]
[1,] -0.9134962 -1.7235934 -0.70432143
[2,] -0.3021132 -1.1122104 -0.09293842
[3,]  0.3317334 -0.4783638  0.54090817
[4,]  0.6206866 -0.1894105  0.82986144
[5,]  3.0311072  2.2210101  3.24028200

outer()FUN参数一起用作*我得到:

> outer(t, b, "*")
             [,1]         [,2]         [,3]
[1,]  0.964707572 -0.282801545  1.286826317
[2,]  0.581704357 -0.170525137  0.775937183
[3,]  0.184628747 -0.054123443  0.246276838
[4,]  0.003612867 -0.001059103  0.004819215
[5,] -1.506404279  0.441598542 -2.009397175

我可以通过outer(t, b, "*")重现t %*% t(b),但我无法弄清楚outer(t, b, "-")如何做到这一点。

我对矩阵代数的了解如果相当有限,但我想试一试。请你帮助我:

  • 重现FUN设置为-
  • 的情况
  • 阐明FUN实际上做了什么?

谢谢。

1 个答案:

答案 0 :(得分:2)

问题是从stats.stackexchange迁移出来的,原始答案包括数学方程式。您可以在下面找到原始文本,以及保留格式的图片。

图片(保留格式)

enter image description here

原始文字

  

两个向量$ x,y $的外积(需要有   相同的维度)通常写成$ x y ^ T $或更多细节,$$   \ begin {pmatrix} x_1 \ x_2 \ \ vdots \ x_n \ end {pmatrix} \ cdot
  \ begin {pmatrix} y_1& y_2& \点和& y_m \ end {pmatrix} $$和   结果是$ n \次m $矩阵$$ \开始{pmatrix} x_1 y_1& X_1   y_2& \ dots x_1 y_m \                    x_2 y_1& x_2 y_2& \ dots x_2 y_m \                     \ vdots \                    x_n y_1& x_n y_2& \点和& x_n y_m \ end {pmatrix} $$所以,你可以看到,结果是一个$ n \次m $矩阵元素   $ i,j $由$ x_i \ cdot y_j $给出。所以这是外部产品所在的地方   FUN是普通的乘法。一般来说,结果是一样的,   总是$ n \次m $ -matrix,其中普通乘法是   替换为任意两位函数$ \ text {FUN}(x,y)$,所以如果   该函数是普通的减号,$ - $然后$ i,j $元素变为   $ x_i - y_j $,如果FUN是幂,$ \ text {FUN}(x,y)= x ^ y $那么$ i,j $   element变为$ x_i ^ {y_j} $,依此类推。

     

这甚至可以用于非数字函数。