How to efficiently preallocate an array of handle objects
23 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Antworten (1)
Disciple of the Forbidden Spell
am 19 Mär. 2018
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 Kommentare
Guillaume
am 19 Mär. 2018
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.
Siehe auch
Kategorien
Mehr zu Graphics Object Programming finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!