How to vectorize this "for" loop, or parallel it.

3 Ansichten (letzte 30 Tage)
chen
chen am 23 Jan. 2014
Kommentiert: chen am 23 Jan. 2014
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

Antworten (2)

Azzi Abdelmalek
Azzi Abdelmalek am 23 Jan. 2014
Bearbeitet: Azzi Abdelmalek am 23 Jan. 2014
fun = @(x,y) x + x.*y;
N=1000
[y,x]=meshgrid(1:N,1:N);
out=triu(fun(x,y))
  2 Kommentare
Azzi Abdelmalek
Azzi Abdelmalek am 23 Jan. 2014
Bearbeitet: Azzi Abdelmalek am 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
chen am 23 Jan. 2014
Thanks a lot !

Melden Sie sich an, um zu kommentieren.


Matt J
Matt J am 23 Jan. 2014
Bearbeitet: Matt J am 23 Jan. 2014
K=(1:N).'*(2:N+1);
  1 Kommentar
Matt J
Matt J am 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!!

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Parallel Computing Toolbox finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by