function performance, same functions has very different speed

1 vue (au cours des 30 derniers jours)
Alexander Malafeev
Alexander Malafeev le 2 Mai 2013
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?

Réponses (1)

John Doe
John Doe le 2 Mai 2013
Modifié(e) : John Doe le 2 Mai 2013
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.

Catégories

En savoir plus sur Linear Algebra dans Help Center et File Exchange

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by