How to efficiently preallocate an array of handle objects
14 ビュー (過去 30 日間)
古いコメントを表示
Hi, I'm looking a fast and proper method to preallocate an array of objects, where the corresponding class is a handle class.
So far, I came across the following methods. But I'm not sure whether all of them are really preallocating the needed space.
1) Is this really preallocating the needed space?
x=myClass.empty(1e5,0);
2)
x(1:1e5) = myClass( param1, param2 );
3) I think this only work if the constructor accept nargin=0, right?
x(1e5) = myClass( param1, param2 );
4) In the case the class also inherits from matlab.mixin.Copyable
x= repmat( copy( myClass( param1, param2), 1e5,1 );
0 件のコメント
回答 (1 件)
Disciple of the Forbidden Spell
2018 年 3 月 19 日
To preallocate the object array, assign the last element of the array first. MATLAB® fills the first to penultimate array elements with default ObjectArray objects.
2 件のコメント
Guillaume
2018 年 3 月 19 日
This is option #3 in the question. As the OP stated, it only works if the constructor is designed to accept 0 arguments.
Furthermore, the behaviour for handle object is far from ideal. You'll end up with an array of n-1 duplicate handles and a different handle at the end, instead of n different handles, as explained in the doc.
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!