2016-10-07 2 views
0

저는 벡터를 입력으로 가진 함수를 가지고 있고 이전 단계의 결과를 사용하여 각 요소에 함수를 적용하고 싶습니다. I는 대 루프를 구현 :함수를 사용하여 for 루프의 옥타브/매트랩 벡터화

function res = myFunc(F) 
if (numel(F) == 1) 
    res = F(1); 
    return; 
end; 
B = F(1); 
for idx = 2:numel(F) 
    B = procAcc(F(idx),B); 
res = B;  
end 

procAcc 함수는 두 개의 매개 변수를 사용하여 출력을 생성한다. 즉, 입력이 벡터 (f1, f2, f3) 인 경우 procAcc (f1, f2) 함수를 먼저 적용하고 결과 (res)를 생성하고 다음 단계에서는 procAcc (a3, res) 최종 결과를 생성합니다. 내 질문은 MATLAB (또는 옥타브) for 루프를 건너 뛸 수 있도록 벡터화 된 방법을 지원하는 경우입니다.

+3

'myFunc'가 아니라'procAcc'를 벡터화해야합니다. – excaza

답변

0

요소 i의 계산은 요소 i-1에 따라 다르므로이 경우 "벡터화"를 사용할 수 없습니다. 계산은 연결되어야합니다. 대신 기능적 접근법을 사용해보십시오. "지도 개선"은 강력한 개념이며 다양한 경우에 적용 할 수 있습니다. 옥타브에서 네이티브 함수가없는 것 같지만 this 답변은 reduce 함수를 제공하는 패키지를 참조합니다. 당신이 그것을 사용하는 경우, for 루프는이 같은 교체해야합니다 :

res = reduce(@(x,y)(procAcc(x,y)), F); 

는 일반적으로 맵리 듀스는 for 루프를 통해 일부 성능상의 이점을 제공하지만, 현재의 경우 그 제공하는 패키지의 구현에 따라 달라집니다 reduce 기능.