約3か月前、Matlabでサンプルを実行していましたが、何か奇妙なことが起こりました。今日、私が他の質問(セルの要素を並べ替えるにはどうすればよいですか?)に対する答えをテストしているときに、再び起こりました。Matlabでの事前割り当てについてです。説明させてください:
ones(100,100)
次の3つの方法で行列()を作成しようとするこのテストコードについて考えてみます。
- 事前割り当てなし(宣言
I=[]
) - 事前割り当てあり(宣言
I=zeros(100,100)
) - 割り当てなし(私は何も宣言しません)
コード:
N=1000;
sum0=0;sum1=0;sum2=0;
for q=1:N
% No pre-allocating
tic
I=[];
for i=1:100
for j=1:100
I(i,j)=1;
end
end
a=toc;sum0=sum0+a;
% with pre-allocation
tic
I=zeros(100,100);
for i=1:100
for j=1:100
I(i,j)=1;
end
end
a=toc;sum1=sum1+a;
% if nothing is declared, I call it no-allocation
tic
for i=1:100
for j=1:100
I(i,j)=1;
end
end
a=toc;sum2=sum2+a;
end
結果は次のとおりです。
sum0 =1.53790886830589 //no pre-allocation
sum1 = 0.127538555877912 //with pre-allocation
sum2 = 0.120887850271473 //no allocation
3番目の方法(私が書いたり書いI=[]
たりしないI=zeros(100,100)
)が最善のアプローチです!これは私の前の質問でも起こりました。(更新部分を参照)
この方法と最初と2番目の方法の違いは何ですか?