Divide table takes a lot of calculation time
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Jesse
el 15 de Nov. de 2018
Comentada: Guillaume
el 16 de Nov. de 2018
In my script i want to devide a table, it works for now, but it takes a lot of time.
How can i do this easier or faster?
reactionforce{3:end,:} = reactionforce{3:end,:}/1e10
0 comentarios
Respuesta aceptada
Guillaume
el 15 de Nov. de 2018
I doubt you're using any feature of a table with a table that large so why not store your data in a matrix instead. Matrix operations will be slightly faster. Saying that, with your example table, the division takes 76 milliseconds on my computer. I would hardly call that a lot of time.
reactionforce = table2array(reactionforce); %convert table to matrix since you don't use the features of tables
%...
reactionforce(3:end, :) = reactionforce(3:end, :) / 1e10;
3 comentarios
Guillaume
el 16 de Nov. de 2018
The contents of a table is always held as a cell array, with one table variable (column) per cell. Therefore, when you write reactionforce{3:end, :} = reactionforce{3;end, :}/1e10, matlab has to:
- concatenate all these cells into one big matrix. This involves copying the content of each variable into a new memory location
- extract the rows of the matrix that you asked for
- perform the division
- convert the result back into a cell array of column
So this is always going to take more time than just performing a division on a matrix. It's surprising that it's so slow on your machine though.
Más respuestas (0)
Ver también
Categorías
Más información sobre Logical 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!