How can I vectorize copying one struct to another?

2 visualizaciones (últimos 30 días)
Ali1373
Ali1373 el 27 de Jun. de 2018
Comentada: Csaba Csupernyák el 20 de Jul. de 2020
I have
p.Results.events(i)
ans =
struct with fields:
message: {16×1 cell}
time: [16×1 uint32]
and
obj.data{1}
ans =
1×70 struct array with fields:
gx
gy
time
events
where for example
obj.data{1}(1).gx(1:10)
ans =
532.4000 532.3000 532.2000 531.8000 531.1000 530.2000 528.9000 527.6000 527.3000 527.9000
I was able to do this using
[obj.data{1}.gx] = p.Results.x{:};
[obj.data{1}.gy] = p.Results.y{:};
[obj.data{1}.time] = p.Results.time{:};
for i = 1:70
obj.data{1}(i).events = p.Results.events(i);
end
It seems like in theory, copying the struct should be the easiest to vectorize but I've hit a wall. If it helps, I know exactly what the fields of events should be.
the source code is on github in the constructor

Respuesta aceptada

Guillaume
Guillaume el 27 de Jun. de 2018
Editada: Guillaume el 27 de Jun. de 2018
events = num2cell(p.Results.events); %convert array to cell array so that it can then be converted to comma separated list
[obj.data{1}.events] = events{:}; %expand cell array into comma separated list and deal into outputs
However, your hierarchy of non-scalar structure within a cell array within a structure can easily be confusing to the reader of your code. You may want to simplify that a bit.
  5 comentarios
Ali1373
Ali1373 el 12 de Jul. de 2018
makes sense, thank you for the replies
Csaba Csupernyák
Csaba Csupernyák el 20 de Jul. de 2020
@Guillaume, could you please explain more elaborately why do you need to convert the array of a field into a cell array, and then put the target field into square brackets?

Iniciar sesión para comentar.

Más respuestas (0)

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!

Translated by