作为尝试对循环进行矢量化的一部分,我偶然发现了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
实际上做了什么?谢谢。
答案 0 :(得分:2)
问题是从stats.stackexchange
迁移出来的,原始答案包括数学方程式。您可以在下面找到原始文本,以及保留格式的图片。
图片(保留格式)
原始文字
两个向量$ 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} $,依此类推。这甚至可以用于非数字函数。