2017-02-28 35 views
1

作爲嘗試向量化循環的一部分,我偶然發現了outer(X, Y, FUN = "*", ...)函數R外部產品如何在R中工作?

我想了解如何重現以下結果一步一步:與FUN參數

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

使用outer()-我得到以下輸出:

> 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 

我能夠通過t %*% t(b)重現outer(t, b, "*"),但我無法弄清楚如何爲outer(t, b, "-")做到這一點。

我的矩陣代數知識如果相當有限,但我想給它一個去。你能,請幫助我:哪裏FUN設置爲-

  • 一些線索什麼FUN實際上做

    • 重現的情況下?

    謝謝。

  • 回答

    2

    該問題從stats.stackexchange遷移出來,原始答案包含數學方程。您可以在下面找到原始文本以及保存格式的圖片。

    圖像(格式化保留)

    enter image description here

    原始文本

    的兩個向量$ X,Y $(這做需要有外積 相同的尺寸)通常寫成$ xy^T $,或者更詳細地說,是$ \ be杜松子酒{pmatrix} X_1 \ X_2 \ \ vdots \ x_n \ {端pmatrix} \ CDOT
    \開始{pmatrix} Y_1 & Y_2 & \點& Y_M \ {端} pmatrix $$和 結果是$ N \倍米$ $$矩陣\開始{pmatrix} X_1 Y_1 & X_1 Y_2 & \點X_1 Y_M \ X_2 Y_1 & X_2 Y_2 & \點X_2 Y_M \ \ vdots \ x_n Y_1 & x_n Y_2 & \點& x_n y_m \ end {pmatrix} $$因此,您可以看到,結果是$ n \ times m $矩陣,其中元素 $ i,j $由$ x_i \ cdot y_j $給出。所以這是外部產品,其中FUN是普通的乘法。一般來說,結果是一樣的,其中 總是一個$ n \ times m $ -matrix,其中普通乘法 被任意兩位置函數$ \ text {FUN}(x,y)$替換,所以如果 該函數是普通減號$ - $,那麼$ i,j $元素變成 $ x_i - y_j $,如果FUN是冪,$ \ text {FUN}(x,y)= x^y $,那麼$ i ,j $ 元素變爲$ x_i^{y_j} $,依此類推。

    這甚至可以與非數字函數一起使用。

    +0

    很好的答案!爲了確保我明白了:所以'R'' outer()'*重新排列向量(轉換'y'),就好像產品將被計算一樣,但它實際上完成了'FUN'參數指定的內容。它是否正確? –

    +0

    是的。是。那樣 –

    +0

    謝謝。由於該問題已被遷移,因此我做了一些編輯嘗試改善其他用戶的可讀性。 –