2017-10-23 22 views
0

Stan을 사용하여 베이 즈 분석을하고 있으며 코드를보다 효율적으로 만들려고합니다.효율적으로 NxJ 행렬을 J 번호가있는 N 길이 배열로 변환

내 Stan 모델 문자열에 NxJ 매트릭스 변수가 있습니다. 이것은 빠른 매트릭스 연산과 할당을 사용하도록이 방법으로 선언되었습니다.

그러나 최종 모델링 단계 (분포 지정)에서이 NxJ 행렬을 각 배열 요소의 J 실제 값을 포함하는 N 길이 배열로 변환해야합니다.

matrix[N,J] x; 
vector[J] y[N]; 

for (i in 1:N) 
    for (j in 1:J) 
     y[i][j] = x[i,j] 

루프에 대한없이 벡터화 방법으로이 작업을 수행 할 수있는 방법이 있나요 : 즉

, 나는 다음과 같은 변환을 원하는?

감사합니다 !!!!

+0

Stan 포럼에서 질문하는 것이 좋습니다. http://discourse.mc-stan.org/ – jaradniemi

+0

여기 또는 YouTube 포럼에서 언제든지 물어보십시오. –

답변

1

아니요. 루프는 Stan에서 매우 빠릅니다. 속도를 벡터화하는 유일한 이유는 파생 상품이 관련되어있는 경우입니다. 조금 줄여서

for (n in 1:N) 
    y[n] = x[n]'; 

까지 줄일 수 있지만 더 이상 효율적이지는 않습니다.

여기에는 비효율적 인 하나의 비효율적 인 부분이 있습니다. 이는 메모리 지역이 부족하다는 것입니다. 행렬이 큰 경우 내부적으로 행별로 이동하기 때문에 행별로 트래버스하는 속도가 느려집니다.

+0

설명해 주셔서 감사합니다 !!! =) –