2012-02-13 8 views
2

Matlabでは、私は "point"(ハンドルクラスではありません)という名前のクラスを持っています。オブジェクトのセル配列を事前に割り当てます

私はそれが事前割り当てすることなく、各反復で成長作り、点のセルのアレイを作成するループを使用します。この例で

for k=1:npoints 
     newpoint=point(*some parameters that depend on k*); 
     pointcell{k}=newpoint; % pointcell grows at each iteration 
    end 

、セルアレイ「pointcell」はなくてもよく、各反復で成長しますパフォーマンス面で最適であること。 このセル配列を事前に割り当てると便利ですか?そうであれば、どのようにすればいいのですか? だけpointcell=cell(npoints)を使用すると、

答えて

2

オブジェクト。

セルアレイを割り当てると、実際にMatlabがメモリを管理するのに役立っていません。これは、各セルが任意のサイズにできるため、事前に割り当てることができるのはポインタの配列だけです。 Check out this for more info on cell arrays

そして、あなたは私はあなたのセルアレイのアプローチに固執お勧めしますrepmat

points = repmat(point(defaultVal1,defaultVal2,...),1,npoints); 
for k=1:npoints 
    newpoint=point(*some parameters that depend on k*); 
    points(k)=newpoint; % pointcell grows at each iteration 
end 
0

recommended way to pre-allocate a cell arrayのいずれか..です動作するようには思えません。また、代わりのセルアレイで、オブジェクトの配列を使用することを検討し

pointcell = cell(npoints); 

または

pointcell = {}; 
pointcell{1, npoints} = []; 
+3

実際、私の場合、pointcell = cell(npoints、1)が必要なようです。 –

0
pointcell = cell(npoints, 1); 

を行うことにより、オブジェクトの配列を割り当てることができます。他の答えの1つは、オブジェクトの配列を使用して言及されました。私はそれをすることをお勧めしません!あらかじめ割り当てられたセル配列への割り当ては高速で、オブジェクトの配列への割り当ては比較的遅いです。あなたはすでに正しいアプローチをしていると思います。

+0

ありがとうございます! –