Mih*_*hai 2 r matrix linear-algebra
作为尝试矢量化循环的一部分,我偶然发现outer(X, Y, FUN = "*", ...)了R.
我试图了解如何逐步重现以下结果:
set.seed(1)
b = rnorm(3, 0, 1)
t = rnorm(5)
Run Code Online (Sandbox Code Playgroud)
使用outer()withFUN参数,-我得到以下输出:
> 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
Run Code Online (Sandbox Code Playgroud)
正如我所得到的,使用outer()withFUN参数*:
> 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
Run Code Online (Sandbox Code Playgroud)
我能够outer(t, b, "*")通过 do 来重现t %*% t(b),但我不知道如何做到这一点outer(t, b, "-")。
我对矩阵代数的了解相当有限,但我想尝试一下。你能帮我么:
FUN重现设置为的情况-FUN实际的作用是什么?谢谢。
该问题已迁移stats.stackexchange,原始答案包括数学方程。您可以在下面找到原始文本以及保留格式的图片。
图像(保留格式)
原文
两个向量 $x,y$(不需要具有相同维度)的外积通常写为 $xy^T$,或者更详细地说,$$ \begin{pmatrix} x_1 \ x_2 \ \vdots \ x_n \end{pmatrix} \cdot
\begin{pmatrix} y_1 & y_2 & \dots & y_m \end{pmatrix} $$ 结果是 $n \times m $ 矩阵 $$ \begin{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 & \dots & x_n y_m \end{pmatrix} $$ 所以,你可以看到,结果是$n\times m$ 矩阵,其中元素 $i,j$ 由 $x_i \cdot y_j$ 给出。所以这是外积,其中 FUN 是普通乘法。一般来说,结果是相同的,总是一个 $n \times m$ 矩阵,其中普通乘法被替换为任意两位函数 $\text{FUN}(x,y)$,所以如果该函数是普通减号,$-$则$i,j$元素变为$x_i - y_j$,如果FUN是幂,$\text{FUN}(x,y) = x^y$则$i,j$元素变为 $x_i^{y_j}$,依此类推。这甚至可以与非数字函数一起使用。