Can you do this calculation any faster?
Afficher commentaires plus anciens
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 commentaires
Oleg Komarov
le 15 Oct 2014
Do you create the inputs like that or those are for example?
Oleg Komarov
le 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
le 15 Oct 2014
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!