function performance, same functions has very different speed

Asked by Alexander Malafeev

Alexander Malafeev (view profile)

on 2 May 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?

Products

John Doe (view profile)

Answer by John Doe

John Doe (view profile)

on 2 May 2013
Edited by John Doe

John Doe (view profile)

on 2 May 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.

Join the 15-year community celebration.

Play games and win prizes!

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi