Can you do this calculation any faster?
Show older comments
Hi there
I am trying to optimize some code, an example is given below. In my code, v_ustar etc are calculated elsewhere, and depend on q. This piece of code needs to run in a quite large loop (larger than the 1:1000 given as example here), and I don't think vectorization of the entire loops is possible due to RAM issues. N is typically 16, but can be larger as well.
I use Ubuntu and MATLAB R2014a (I will probably upgrade to R2014b soon)
Thanks in advance!
N=16;
for q=1:1000
%generate some random test data
v_ustar=rand(2*N,N,N);
vstar_u=rand(2*N,N,N);
u_ustar=rand(2*N,N,N);
vstar_v=rand(2*N,N,N);
F=...
repmat(reshape(v_ustar,[2*N 1 N N]),[1 2*N 1 1]).*...
repmat(reshape(conj(vstar_u), [1 2*N N N]),[2*N 1 1 1])-...
repmat(reshape(u_ustar,[2*N 1 N N]),[1 2*N 1 1]).*...
repmat(reshape(conj(vstar_v), [1 2*N N N]),[2*N 1 1 1]);
F=reshape(F,4*N^2,[]).';
end
4 Comments
Oleg Komarov
on 15 Oct 2014
Do you create the inputs like that or those are for example?
Oleg Komarov
on 15 Oct 2014
The only small improvement I can think with this amount of code is:
F =...
bsxfun(@times, reshape(v_ustar,[2*N 1 N N]), reshape(conj(vstar_u), [1 2*N N N])) -...
bsxfun(@times, reshape(u_ustar,[2*N 1 N N]), reshape(conj(vstar_v), [1 2*N N N]));
You could get rid of the `reshape()` if you store:
v_ustar(:,1,:,:) = v_ustar_list(q1,:,:,:)
and finally get to:
F =...
bsxfun(@times, v_ustar, conj(vstar_u)) -...
bsxfun(@times, u_ustar, conj(vstar_v));
Henrik
on 15 Oct 2014
Accepted Answer
More Answers (0)
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!