2017-02-28 6 views
1

ループをベクトル化しようとする中で、私はのouter(X, Y, FUN = "*", ...)の機能を見つけました。外部製品はどのようにRで動作しますか?

私はステップによって、次の結果ステップを再現する方法を理解しようとしています:私は、次の出力を得る

FUN引数で outer()を使用して
set.seed(1) 
b = rnorm(3, 0, 1) 
t = rnorm(5) 

-として:

FUNouter()を使用して
> 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(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

元のテキスト

を持っている必要はありませない2つのベクトルの$ X、Yの$(の外積同じ次元の )は$ xy^T $と書かれています。詳細は$$ \ beですジン{pmatrixの} X_1 \ X_2 \ \ vdots \ x_nに関する\端{pmatrixの} \ CDOT
\開始{pmatrixの} Y_1 & & Y_2 \ドット& y_m \端{pmatrixの} $$と 結果は、$ nは\時間Mの$行列は$$ \ {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です。通常の乗算​​は が任意の2つの場所の関数$ \ text {FUN}(x、y)$に置き換えられます。したがって、 その関数は普通のマイナス、$ - $であり、FUNがべき乗であれば$ i、j $要素は $ x_i - y_j $になり、$ \ text {FUN}(x、y)= x^y $ならば$ i 、j $ 要素は$ x_i^{y_j} $になります。以下同様です。

これは非数値関数でも使用できます。

+0

私が理解していることを確かめるために、 'R'の' outer() 'は、生成物を計算するかのようにベクトルを並べ替えます(' y'を転置する)が、 'FUN'引数が指定するものを実際に行います。これは正しいです? –

+0

はい。はい。その通り –

+0

ありがとう。質問が移行されて以来、他のユーザーの読みやすさを向上させるためにいくつかの編集を行いました。 –

関連する問題