Thanks for your response, Sean. However, it turns out every (nonabstract) class has a static method called empty, which can be used to create empty array. It makes things much simpler. See details here .
Matrix/Array of Objects vs. Class Constructor
10 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Let say I have a class Foo
classdef Foo
function obj = Foo(x,y)
% constructor's body
end
end
If I want to preallocate spaces for a matrix of Foo objects
>> foos = Foo(3,4);
How is it different from creating one object with arguments x = 3, y = 4?
>> foo = Foo(3,4);
Note that if I avoid preallocation, Matlab will give me some warning due to speed optimization.
Thanks,
0 Kommentare
Weitere Antworten (1)
Sean de Wolski
am 30 Sep. 2014
Bearbeitet: Sean de Wolski
am 30 Sep. 2014
It depends on how your class sizes obj:
classdef FooC
properties
x
end
methods
function obj = FooC(sz)
obj.x = 1;
obj = repmat(obj,sz);
end
end
end
Now
fc = FooC([3,4])
I don't particularly like this approach. I would typically recommend constructing it similar to how you would construct a distributed array or gpuArray using static methods. Consider this:
classdef FooC
properties
x
end
methods
function obj = FooC()
obj.x = 1;
end
end
methods(Static)
function obj = preallocate(sz)
obj = FooC();
obj = repmat(obj,sz);
end
end
end
Now FooC always returns a scalar object but FooC.preallocate will give you an sz object, compare:
fcscalar = FooC
fcmat = FooC.preallocate([3,4])
2 Kommentare
Sean de Wolski
am 1 Okt. 2014
This is where varargin is your friend:
function preallocate(sz,varargin)
obj = FooC(varargin{:})
obj = repmat(obj,sz);
end
Siehe auch
Kategorien
Mehr zu Performance and Memory 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!