質問のforループと配列演算の計算速度についてですが、
N = 10の場合、forループ(t1)だと1.6907e-06 sec、配列演算(t2)だと1.8452e-07 sec。
N = 1000の場合、t1 = 2.4441e-06、t2 = 5.7508e-07
N = 100000の場合、t1 = 2.2313e-04、t2 = 2.2722e-05
N = 10000000の場合、t1 = 0.0306、t2 = 0.0172
の結果となったので、Nの値にも寄りますがforループから配列演算にすることで、10倍から2倍くらいは速くなります。
ticのドキュメントによると、実行時間が0.1 sec以下の場合は厳密に測定できないので、timeitを使って測定しています。
測定コード
clear
N = 10;
X = randn([1,N]);
f = @() forLoopFunc(X, N);
t1 = timeit(f, 1)
f = @() vectorizedFunc(X);
t2 = timeit(f, 1)
%% function definition
function Y = forLoopFunc(X, N)
Y=zeros(1,N);
for i = 1:N
Y(i) = X(i) ^ 2;
end
end
function Y = vectorizedFunc(X)
Y=X.*X;
end
MATLABは配列・ベクトル演算の内部実装で高速化、最適化されたライブラリを使用しています。forループだと要素ごとの処理となってしまいその恩恵が受けられないのですが、Y=X.*Xのように配列演算でおこなうとその恩恵が大きいためです。