How to vectorize this "for" loop, or parallel it.
Afficher commentaires plus anciens
fun = @(x,y) x + x.*y;
N = 1e3;
K = zeros(N);
for i = 1:N
for j = i:N
K(i,j) = fun(i, j);
end
end
Réponses (2)
Azzi Abdelmalek
le 23 Jan 2014
Modifié(e) : Azzi Abdelmalek
le 23 Jan 2014
fun = @(x,y) x + x.*y;
N=1000
[y,x]=meshgrid(1:N,1:N);
out=triu(fun(x,y))
2 commentaires
Azzi Abdelmalek
le 23 Jan 2014
Modifié(e) : Azzi Abdelmalek
le 23 Jan 2014
N=4000;
tic
fun = @(x,y) x + x.*y;
[y,x]=meshgrid(1:N,1:N);
f=triu(fun(x,y));
toc
tic
K = zeros(N);
for i = 1:N
for j = i:N
K(i,j) = fun(i, j);
end
end
toc
isequal(f,K)
Elapsed time is 0.193062 seconds.
Elapsed time is 2.421795 seconds.
chen
le 23 Jan 2014
K=(1:N).'*(2:N+1);
1 commentaire
Matt J
le 23 Jan 2014
Or,
K=bsxfun(@times,(1:N).', 2:N+1);
On my machine, this is faster than straight multiplcation for some weird reason!!
Catégories
En savoir plus sur Parallel Computing Toolbox dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!