2014-05-23 3 views
2

Julia에서 타이어를 더 철저히 걷어내는 계속되는 오디세이에서 필자는 다시 베이지안 교과목 연습에 대한 솔루션을 다시 구현할 것입니다. 지난 번에 저는 Julia에서 복합 배포 도구를 발견하고 이번에는 그 사람들과 함께하기로했습니다. 그 부분은 잘 작동합니다 (제쳐두고, NormalInverseGamma 함수가 데이터 벡터가 아닌 충분한 통계를 얻지 못하거나 아직 구현되지 않은 경우)을 알지 못했습니다.Julia에서 문자열을 전달하고 함수 인수로 전달

여기 몇 가지 사후 분포의 샘플을 비교하고 싶습니다. 나는 모든 순열을 비교하고자하는 3 개의 후부 샘플을 가지고있다. 내 compare 함수에 인수해야한다 무엇을 바꾸어 넣 수 있어요 :

using Distributions 

# Data, the expirgated versions 
d1 = [2.11, 9.75, 13.88, 11.3, 8.93, 15.66, 16.38, 4.54, 8.86, 11.94, 12.47] 
d2 = [0.29, 1.13, 6.52, 11.72, 6.54, 5.63, 14.59, 11.74, 9.12, 9.43] 
d3 = [4.33, 7.77, 4.15, 5.64, 7.69, 5.04, 10.01, 13.43, 13.63, 9.9] 

# mu=5, sigsq=4, nu=2, k=1 
# think I got those in there right... docs were a bit terse 
pri = NormalInverseGamma(5, 4, 2, 1) 
post1 = posterior(pri, Normal, d1) 
post1_samp = [rand(post1)[1] for i in 1:5000] 

post2 = posterior(pri, Normal, d2) 
post2_samp = [rand(post2)[1] for i in 1:5000] 

post3 = posterior(pri, Normal, d3) 
post3_samp = [rand(post2)[1] for i in 1:5000]; 

# Where I want my permutations passed in as arguments 
compare(a, b, c) = mean((a .> b) & (b .> c)) 

#perm = permutations([post1_samp, post2_samp, post3_samp]) # variables? 
#perm = permutations([:post1_samp, :post2_samp, :post3_samp]) # symbols? 
perm = permutations(["post1_samp", "post2_samp", "post3_samp"]) # strings? 

[x for x in perm] # looks like what I want; now how to feed to compare()? 

답변

2

내가 제대로 읽고 있어요 당신이 여섯 개 출력을 원한다면, 당신은 permutations에 배열을 포함하는 튜플을 통과 한 다음 apply을 사용할 수 있습니다 :

julia> perm = permutations((post1_samp, post2_samp, post3_samp)) 
Permutations{(Array{Any,1},Array{Any,1},Array{Any,1})}(({10.562517942895859,10.572164090071183,10.736702907907505,10.210772173751444,14.366729334490795,10.592629893299842,9.89659091860089,8.116412691836256,10.349724070315517,11.268377549210639 … 12.064725902593915,10.303602433314985,10.002042635051714,9.055831122365928,10.110819233623218,11.562207296236382,10.64265460839246,13.450063260877014,12.017400480458447,10.4932272939257},{7.405568037651908,8.02078920939688,7.511497830660621,7.887748694407902,7.698862774251405,6.007663099515951,7.848174806167786,9.23309632138448,7.205139036914154,8.277223275210972 … 7.06835013863376,6.488809918983307,9.250388581506368,7.350669918529516,5.546251008276725,8.778324046008263,10.833297020230216,9.2006982752771,9.882075423462595,3.253723211533207},{9.531489314208752,7.395780786761686,6.224734811478234,5.200474665890965,8.044992565567913,7.764939771450804,6.646382928269485,5.501893299017636,6.993003549302548,7.243273003116189 … 10.249365688182436,7.499165465689278,6.056692905419897,7.411776062227991,9.829197784956492,7.014685931227273,6.156474145474993,10.258900762434248,-1.044259248117803,7.284861693401341})) 

julia> [apply(compare, p) for p in perm] 
6-element Array{Any,1}: 
0.4198 
0.4182 
0.0636 
0.0154 
0.0672 
0.0158 

는 이름에 숫자 변수의 무리 가지고 실족 일반적으로 사용자들은 비록 기억 (. "post_samples"는 말) 보통은 어떤 종류의 명명 된 집합에 함께해야한다고 제안 있음을

관련 문제