它是我第二天與朱莉婭學習和實驗。雖然我仔細閱讀了關於元編程的文檔(但也許不夠小心)和幾個相同的線程。我仍然無法弄清楚如何在函數內部使用它。 我tryed做一些數據更靈活的模擬如下功能:如何在函數參數中使用元編程?
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不要在局部範圍內工作,它不工作。我能做些什麼來圍繞這個工作?
也是原本的功能,似乎不是那麼快,我在性能上做了什麼大的失誤?
我真的appriciate任何recommandation。 在此先感謝。
只是將分佈作爲參數傳遞有什麼問題?使用'eval'似乎過於複雜。 – phg
@phg它似乎並不複雜,它是。代碼最初來自一個R腳本,這或多或少是必需的。你有什麼想法,爲什麼重複如此之慢?它是BLAS,因此它應該像閃電一樣快,它是功能中最慢的部分。 – AaronP