Vectorized way to assign columns/rows of matrix to struct array's field

11 visualizaciones (últimos 30 días)
Currently I'm using a for loop to assign parts of a matrix to struct's field, like this:
clear
len = 90000;
width = 51;
structArray(1:len) = struct("field",zeros(width,1));
matrixToAssign = rand(width,len);
for i=1:len
structArray(i).field = matrixToAssign(:,i);
end
Because I could vectorize the calculations(not seen here), the assignment of the solutions in the for loop takes an equal amount of time relative to the calculation itself. Is there a way to do the assignment also in a fast vectorized way ?
The calculations I'm doing in this part of the script are depending on len. Typically for examples len>>90000 the accumulated calculations need around 3s and the accumulated assignments need around 2s (calculation and assignment are done multiple times). I have seen something like below, which tends in the right direction but isn't quite what I want to do. I have also seen transformations into cell arrays but I believe those are not faster than the loop method, but maybe I'm wrong.
[structArray.field] = deal(matrixToAssign);

Respuestas (1)

Bruno Luong
Bruno Luong el 6 de Ag. de 2022
split = num2cell(matrixToAssign,1);
[structArray.field] = deal(split{;});
  3 comentarios
Bruno Luong
Bruno Luong el 6 de Ag. de 2022
Editada: Bruno Luong el 6 de Ag. de 2022
IMO If you care about speed, you shouldn't split your array into struct at the first place. It cost you 0 second.
Jonas Schütz
Jonas Schütz el 6 de Ag. de 2022
I guess you are right. I thought there is a faster way to do it. Perhaps I have to take that into consideration.

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos


Versión

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by