How to efficiently preallocate an array of handle objects
조회 수: 23 (최근 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에서 Graphics Object Programming에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!