How to improve speed when printing multiple images inside a for loop

4 visualizaciones (últimos 30 días)
My code generates a figure on each iteration of a for loop, which is printed to a png file each time. Is there a way to speed up this process by letting Matlab continue with the loop while the printing is ongoing? (like a fork-join kind of flow). Any help will be welcome. Example code:
for k=1:10
aux = randn(1e3);
fh = figure('visible','off'); imagesc(aux);
print(fh,'-dpng','-r0','./temp.png'); close(fh)
end
  2 comentarios
Rik
Rik el 1 de Feb. de 2018
You are overwriting the image on each loop iteration. And have you tried parfor?
Mario A
Mario A el 1 de Feb. de 2018
The actual code within the for loop (not the example I wrote above) is not compatible with parfor (neither it overwrites the image each time).

Iniciar sesión para comentar.

Respuesta aceptada

Mario A
Mario A el 1 de Feb. de 2018
I just found a solution form the parallel computing toolbox, which is the use of parfeval function. This function allows an asynchronous running of another function. The original example is optimized by writing
for k=1:10
aux = randn(1e3);
fh = figure('visible','off'); imagesc(aux);
parfeval(@print,0,fh,'-dpng','-r0','./temp.png'); close(fh)
end

Más respuestas (1)

Rik
Rik el 2 de Feb. de 2018
It is also possible print is inherently slower than it could be, in which case the screencapture FEX submission by Yair Altman might result in a speed increase. You can even use that parfeval in combination with this.

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by