2017-08-11 16 views
0

に渡すXのさまざまな値に対してe^(ax+b) over a=-1:1b=-1:1を計算したいと思います。私は5つの要素のリストの形で出力します。リストの各要素は3X3行列です。2つ以上のベクトルをR

私はこれをOuterとVectorizeで実現しました。さて、sigm1(x=1:3)はザ・のみ、このコードスニペットを引き戻す必要な出力

[[1]] 
     [,1]  [,2]  [,3] 
[1,] 0.1353353 0.3678794 1.000000 
[2,] 0.3678794 1.0000000 2.718282 
[3,] 1.0000000 2.7182818 7.389056 

[[2]] 
     [,1]  [,2]  [,3] 
[1,] 0.04978707 0.1353353 0.3678794 
[2,] 0.36787944 1.0000000 2.7182818 
[3,] 2.71828183 7.3890561 20.0855369 

[[3]] 
     [,1]  [,2]  [,3] 
[1,] 0.01831564 0.04978707 0.1353353 
[2,] 0.36787944 1.00000000 2.7182818 
[3,] 7.38905610 20.08553692 54.5981500 

を与える

sigm = function(a=0,b=0,x){ 
return(exp(x*a+b)) 
} 

sigm1 = Vectorize(function(a=-1:1,b=-1:1,x){ 

outer(a,b,sigm,x) 
},SIMPLIFY = FALSE) 

は、私がa=-1:1b=-1:1のデフォルト値を使用しています。関数呼び出し中に同じものを渡そうとすると、それはうんざりしてしまいます。例えば。

sigm1(-1:1,-1:1,1:3) 

[[1]] 
     [,1] 
[1,] 0.1353353 

[[2]] 
[,1] 
[1,] 1 

[[3]] 
    [,1] 
[1,] 54.59815 

なぜ引数を渡して出力に違いがあるのか​​わかりません。

+1

を作成するためにsapplyを使用することができます。「'Vectorize'に' vectorize.args'引数で指定された引数が 'に渡される引数です。..実際に渡されたものだけベクトル化され、デフォルト値は適用されません。したがって、パラメータを渡すと、3つのパラメータ([a = -1、b = -1、x = 1]、[a = 0、b = 0、x = 2]、[a = 1、b = 1、x = 3])。 –

+0

@kasaあなたが以前に投稿した同じ質問と答えが受け入れられたようです。それがあなたの質問に答えるなら、これを削除する方がいいです – akrun

答えて

1

あなたのベクトル化機能ドキュメントから

sigm = function(a, b, x){ 
    return(lapply(x, function(xx) sapply(b, function(bb) 
     sapply(a, function(aa) exp(xx*aa+bb))))) 
} 
sigm(a = -1:1, b = -1:1, x = 1:3) 
#[[1]] 
#   [,1]  [,2]  [,3] 
#[1,] 0.1353353 0.3678794 1.000000 
#[2,] 0.3678794 1.0000000 2.718282 
#[3,] 1.0000000 2.7182818 7.389056 

#[[2]] 
#   [,1]  [,2]  [,3] 
#[1,] 0.04978707 0.1353353 0.3678794 
#[2,] 0.36787944 1.0000000 2.7182818 
#[3,] 2.71828183 7.3890561 20.0855369 

#[[3]] 
#   [,1]  [,2]  [,3] 
#[1,] 0.01831564 0.04978707 0.1353353 
#[2,] 0.36787944 1.00000000 2.7182818 
#[3,] 7.38905610 20.08553692 54.5981500 
関連する問題