5

我正在将大量数字打印为 .png 文件。每个图都是数据矩阵中一列的图,我将 .png 文件串在一起形成动画。

我的问题是前几百张图像打印得很快,但是创建每个新图形的时间迅速增加,从前几百个 .png 文件的约 0.2 秒到大约第 800 个图形的 2 秒或更多。

在脚本运行期间内存使用量会增加,但每隔几秒左右只会增加 1MB。这是在运行 R2009b 64 位的 Windows 上。

我的代码看起来像:

n = 1000;
matrix = rand(n);

f = figure('Visible','off');    % create the figure

for i_ =1:n
    plot(1:n,matrix(:,i_));
    ylim([0 1]);
    set(f,'PaperUnits','inches','PaperPosition',[0 0 6 4]);
    png_name = [ 'img/timestep_' sprintf('%05d',i_) ];
    print('-dpng', png_name);
end
4

2 回答 2

4

尽量不要重新生成绘图,而只在每次迭代时更改XData和属性:YData

set(f,'PaperUnits','inches','PaperPosition',[0 0 6 4]);
h = plot(1, matrix(:,1));
ylim([0 1]);

for i_ = 1:n
    set(h, 'XData', 1:n, 'YData', matrix(:,i_))
    png_name = sprintf('img/timestep_%05d',i_);
    print('-dpng', png_name);
end

另一个建议。如果要创建动画,为什么要生成 png 文件?使用GETFRAME并直接在 MATLAB 中制作MOVIE 。

于 2012-04-05T16:57:51.427 回答
2

这似乎是内存泄漏。您可以通过创建和关闭循环中的每个图形来帮助 Matlab 释放泄漏的内存。

for i = 1:n
    f = figure;
    % plot
    % print
    close(f)
end

更新: 这是一个问题和答案,说明这种技术有效。

于 2013-09-06T15:42:58.430 回答