MATLAB で 2 つの異なる方法でいくつかのコードを記述しました。最初に、一見ばかげているように見える 2 つの for ループを使用しました。
Initial = [zeros(10,1) ones(10,1)];
for xpop=1:10
for nvar=1:10
Parent(xpop,nvar) = Initial(nvar,1)+(Initial(nvar,2)-Initial(nvar,1))*rand();
end
end
2 番目のスキームでは、ベクトル化された計算を実行しようとしました (より高速になる可能性があると想定しました)。
Parent = repmat(Initial(:,1),1,10) + rand(10,10).*(repmat(Initial(:,2),1,10)-repmat(Initial(:,1),1,10));
コードの 3 つの異なる実行での経過時間は、次のように表示されます。
Elapsed time is 0.000456 seconds.
Elapsed time is 0.006342 seconds.
Elapsed time is 0.000457 seconds.
Elapsed time is 0.006147 seconds.
Elapsed time is 0.000471 seconds.
Elapsed time is 0.006433 seconds.
最初のスキームが 2 番目のスキームよりも速いのはなぜですか? 「.*」コマンド内で本当に 2 つの愚かな for ループを実行していますか?