私の2日目ジュリアの学習と実験。私は、メタプログラミングに関するドキュメンタントを慎重に読んでいますが(注意深くはないかもしれませんが)、いくつかの疑似スレッドを読んでいます。私はまだ関数の中でそれをどのように使うことができるのか分かりません。これによりmetaprogrammingを関数argsで使用するには?
using Distributions
function gendata(N,NLATENT,NITEMS)
latent = repeat(rand(Normal(6,2),N,NLATENT), inner=(1,NITEMS))
errors = rand(Normal(0,1),N,NLATENT*NITEMS)
x = latent+errors
end
: は、私はより柔軟ないくつかのデータのシミュレーションのための次の関数を作るためにしようと試み
using Distributions
function gendata(N,NLATENT,NITEMS,LATENT_DIST="Normal(0,1)",ERRORS_DIST="Normal(0,1)")
to_eval_latent = parse("latent = repeat(rand($LATENT_DIST,N,NLATENT), inner=(1,NITEMS))")
eval(to_eval_latent)
to_eval_errors = parse("error = rand($ERRORS_DIST,N,NLATENT*NITEMS)")
eval(to_eval_errors)
x = latent+errors
end
しかし、evalはローカルスコープでは動作しませんので、それはいけない仕事。これを取り巻く仕事をするために私は何ができますか?
また、もともとの機能は、それほど高速ではないようですが、性能に関して大きなミスを犯しましたか?
私は本当にお勧めを薦めます。 ありがとうございます。
ディストリビューションを引数として渡すだけで何が問題になりますか? 'eval'を使うのはあまりにも複雑です。 – phg
@phgあまりにも複雑すぎるとは思われません。このコードは最初はRスクリプトからのものでしたが、これは多かれ少なかれ必要なものです。あなたは反復がとても遅いというアイデアはありますか? BLASなので、稲妻のように速くなければならない、それは機能の中で最も遅い部分です。 – AaronP