의도 된 용도로 사용하기에는 너무 느린 3 중첩 for 루프가있는 함수를 작성하고 있습니다. 병목 현상은 분명히 루핑 부분입니다. 실행 시간의 거의 100 %가 가장 안쪽 루프에서 소비됩니다.
기능은 ec
라는 차원 매트릭스를 입력으로 rM
라는 2 차원 매트릭스를 받아 반환Matlab - 중첩 된 For-Loop 가속화
rows = size(rM, 1);
cols = size(rM, 2);
%preallocate.
ec = zeros(rows+1, cols, numRiskLevels);
ec(1, :, :) = 100;
for risk = minRisk:stepRisk:maxRisk;
for c = 1:cols,
for r = 2:rows+1,
ec(r, c, risk) = ec(r-1, c, risk) * (1 + risk * rM(r-1, c));
end
end
end
... 문제는,이다
두 번째 루프가 벡터화 될 수있는 것처럼 보입니다.'for c = 1 : cols'와 그'end'를 제거하고, 가장 안쪽 라인에서'c'를':'로 바꿉니다. 그건 시간을 줄이는 데 도움이됩니다 –
@ LuisMendo 당신의 제안에 감사드립니다. 구현했지만 흥미롭게도 코드가 이전보다 느리게 실행되었습니다. – bluebox
정확히 무엇을하려고합니까? 아마도 현재의 속도를 높이려는 것보다 다른 계산을 사용하는 것이 가능한 해결책입니까? –