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

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

回答 (2 件)

Azzi Abdelmalek
Azzi Abdelmalek 2014 年 1 月 23 日
編集済み: Azzi Abdelmalek 2014 年 1 月 23 日

0 投票

fun = @(x,y) x + x.*y;
N=1000
[y,x]=meshgrid(1:N,1:N);
out=triu(fun(x,y))

2 件のコメント

Azzi Abdelmalek
Azzi Abdelmalek 2014 年 1 月 23 日
編集済み: Azzi Abdelmalek 2014 年 1 月 23 日
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 2014 年 1 月 23 日
Thanks a lot !

サインインしてコメントする。

Matt J
Matt J 2014 年 1 月 23 日
編集済み: Matt J 2014 年 1 月 23 日

0 投票

K=(1:N).'*(2:N+1);

1 件のコメント

Matt J
Matt J 2014 年 1 月 23 日
Or,
K=bsxfun(@times,(1:N).', 2:N+1);
On my machine, this is faster than straight multiplcation for some weird reason!!

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeParallel Computing Toolbox についてさらに検索

質問済み:

2014 年 1 月 23 日

コメント済み:

2014 年 1 月 23 日

Community Treasure Hunt

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

Start Hunting!

Translated by