function performance, same functions has very different speed
조회 수: 1 (최근 30일)
이전 댓글 표시
Dear forum, I have two functions
function [Md] = MDx( M, dx )
w = size(M,2);
for i=2:w-1
Md(:,i) = ( M(:,i+1) - M(:, i-1) )/(2*dx);
end
Md(:,1) = ( M(:,2) - M(:, 1) )/dx;
Md(:,w) = ( M(:,w) - M(:, w-1) )/dx;
return
and
function [Md] = MDy( M, dy )
h = size(M,1);
for i=2:h-1
Md(i,:) = ( M(i+1,:) - M(i-1, :) )/(2*dy);
end
Md(1,:) = ( M(2,:) - M(1, :) )/dy;
Md(h,:) = ( M(h,:) - M(h-1,:) )/dy;
return
this functions are computing gradient in X and Y directions, they are quite same but on square matrix MDx is 40 times faster than MDy, what is the reason for that?
댓글 수: 0
답변 (1개)
John Doe
2013년 5월 2일
편집: John Doe
2013년 5월 2일
I believe this is due to the way matrices are stored in Matlab.
A matrix is stored column-wise, as below:
A = [1 2 3;4 5 6;7 8 9];
A(1,1) = A(1) = 1;
A(2,1) = A(2) = 4;
...
A(1,3) = A(7) = 3;
A(:,1) = A(1:3);
A(1,:) = A([1 4 7]);
This makes it faster to do calculations on entire columns, rather than rows, thus MDx is fastest.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Schedule Model Components에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!