To convert a variable (struct with fields of numeric matrix) to a sliced variable (an array of struct)

1 Ansicht (letzte 30 Tage)
I was doing code refactor to apply parfor to some legacy code. Legacy code creates a big struct variable called 'Boot', with fields of numeric matrix.
I want to convert it to a new sliced variable "BootS" , but if I do the conversion like the attached image, Matlab give me warnings that I should preallocate it.
( iters means number of iterations.)
warnings.png
I tried to preallocate BootS as the code commented out , it fails with runtime errors.
Anyone has good idea to convert it elegantly??
  2 Kommentare
Edric Ellis
Edric Ellis am 21 Feb. 2019
There are a few possible failure modes here - please could you post a self-contained example that fails when using parfor. I tried the following in R2018b, and it worked fine, so I'm missing something:
iters = 10;
clear BootS;
BootS(iters) = struct();
parfor i = 1:iters
BootS(i).PD.sim = rand();
BootS(i).PDOS.sim = rand();
end
(I also presume you're doing some computationally intensive work in the parfor loop - simply reformatting data in this way using parfor is highly unlikely to gain you any performance advantage)
Owen Zhang
Owen Zhang am 25 Feb. 2019
thank you, i got it.. there is no runtime error with your code.
(in this loop, i just want to convert the data from Boot to Boots, a new sliced variable. Boot is not a sliced variable , can't be used in parfor.)
but with runtime error by creating a function returning the struct..
but anyway , i see how to do it now.
iters = 10;
clear Boots;
Boots(iters) = struct();
for i=1:iters
Boots(i) = genOneStruct();
end

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Owen Zhang
Owen Zhang am 25 Feb. 2019
closed
see answer above

Weitere Antworten (0)

Kategorien

Mehr zu Structures finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by