how to preallocate an object array?
32 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Mark Ricard
el 17 de Nov. de 2020
Comentada: Walter Roberson
el 18 de Nov. de 2020
I am trying to preallocate an object array of a class. Below is the class that I am using in MyobjectArray class
classdef MyData
properties
x = []; % a column vector of data
end
methods
function obj = MyData(nRows)
if nRows > 0
obj.x = zeros(nRows,1);
end
end
end
end
In the code below I am using obj.value = zeros(nArrays,1); to preallocate. What is the correct way to preallocate an object array?
classdef MyobjectArray
properties
value = []; % an array of MyData objects
end
methods
function obj = MyobjectArray(nArrays, nRows)
if nargin ~= 0
obj.value = zeros(nArrays,1);
for i = 1:nArrays
obj(i).value = MyData(nRows);
end
end
end
end
end
0 comentarios
Respuesta aceptada
Walter Roberson
el 17 de Nov. de 2020
Do not initialize value to [] if the property is not going to have type "double" .
If it is going to have type that is one of the built-in types, use empty() to create an empty array of the correct type
If MyData is not going to return double, then do not assign zeros to initialize the property . If MyData(nRows) returns a constant value you would be better with
[obj(1:nArrays).value] = MyData(nRows);
2 comentarios
Mark Ricard
el 18 de Nov. de 2020
Editada: Walter Roberson
el 18 de Nov. de 2020
Walter Roberson
el 18 de Nov. de 2020
function obj = MyobjectArray(nArrays, nRows)
if nargin ~= 0
[obj(1:nArrays).value] = deal(MyData(nRows));
end
end
Tested.
This does assume that myData(nRows) returns constant output.
The property will be set to a vector in which each item has the same data pointer -- one original copy of the MyData object being pointed to multiple times. However, as these are value class objects and not handle class objects, that is not a problem unless you plan to use mex functions that overwrite the input without properly checking first to see if they are dealing with shared copies or not: any conformant function will either automatically or deliberately use copy-on-write.
Más respuestas (0)
Ver también
Categorías
Más información sobre Cell Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!