need repmat help

Hello,
I have a 4D array with two for loops that is very slow. I know repmat is a good tool to speed things up but I am not very good at using it yet. Is there a way to use repmat to replace the follow set of for loops:
%th_diff3_1 has the following dimensions (621,1405,12,116)
for a = 1:621
for b = 1:1405
x = sum(th_diff3_1(a,b,:,:));
x = sum(x(1,1,:,:));
percent3_1(a,b) = (x/1390) * 100;
end
end
Please help me understand repmat!
Thanks,
Dan

 Accepted Answer

Fangjun Jiang
Fangjun Jiang on 19 Sep 2011
It's not about repmat. I think you can do this:
x=sum(th_diff3_1,4);
x=sum(x,3);
percent3_1=(x/1390) * 100

4 Comments

Jan
Jan on 19 Sep 2011
It is faster to sum at first over the 3rd dimension and then over the 4th, because this allows a better usage of the cache.
(x/1390)*100 is slowetr than x*(100/1390). In the first case two matrix operations are needed, in the second only one.
Fangjun Jiang
Fangjun Jiang on 19 Sep 2011
Jan, you are amazing! How do you know all of that? I admire you!
Jan
Jan on 19 Sep 2011
@Fangjun: Thanks, but I do not _know_ such details. I just try it taking into account that the calculations are performed by a processor. I've learned programming when efficiency was really important: on a ZX81 with 1kB RAM. It was possible to read the complete operating system in two afternoons.
Although Matlab has a higher complexity, the fundamental rules for efficiency did not change: Keep the data compact to avoid unneded operations.
Dan
Dan on 20 Sep 2011
Fangjun and Jan, thanks so much. I realize now this is not a repmat problem, I just have for loops engrained in my head and need to think differently!

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!