【问题标题】:Speed up printing of mesh in octave加快八度网格的打印速度
【发布时间】:2016-12-18 18:53:21
【问题描述】:

在 Octave 中导出下面的网格需要几分钟,但在 Matlab 中只需几秒钟(在 Ubuntu、Linux Mint 和 Windows 上)。可以做些什么来加快 Octave 中的进程?

x = linspace(0,1,100);
y = linspace(0,1,5000);
[X, Y] = meshgrid(x,y);
mesh(X,Y,ones(5000,100));
print -dpdf 'output.pdf' # Takes several minutes in octave

我尝试过的没有加快打印过程的方法:

  • 将 graphics_toolkit 更改为 fltk、gnuplot 和 qt
  • 在 gnuplot 中在几个不同的替代方案之间设置终端
  • 在绘图和打印之前运行图形('visible','off')
  • 将 Octave 更新到 4.0.2
  • 将 Octave 更新到 4.2.0

【问题讨论】:

  • 您使用的是什么操作系统?你可以试试最新发布的 Octave 版本吗? (4.2.0)
  • 已使用操作系统(Linux mint 和 Ubuntu)更新了原始帖子。将编译4.2.0版本,看看上面的代码是否运行得更快。
  • 您是否有工作设置可以在合理的时间内运行上述代码?想尝试模仿它。
  • 几天之内都无法使用它,然后我的笔记本电脑上就只能是 windows x64 了。这可能需要在帮助列表上发布一个帖子,让一些更熟悉内部结构的人可以参与进来。
  • fwiw - 我可以确认这在 Windows 7 上的 Octave 4.0.3 (for x64) 中也很慢

标签: octave mesh


【解决方案1】:

通过直接创建 pdf 而不是中间的 eps 步骤,可以显着减少运行时间。为此,请将图形后端设置为 gnuplot

graphics_toolkit('gnuplot')

并通过将打印命令更改为来使用 pdfcairo 终端

print('-dpdfcairo','output.pdf')

这是 Dmitri 在 Octave 帮助列表中建议的。谢谢!

上述更改将我系统上的运行时间从 60 秒缩短到了 30 秒左右。我仍然认为这相当慢,直接在 gnuplot 中导出类似的图可以在大约 12 秒内完成(仍在我的系统上)。 Octave 的打印命令中的某些内容会产生很多开销,但目前我不知道具体是什么。我创建了一个玩具示例来生成类似的情节,它几乎与在 gnuplot 中本地创建情节一样快(大约 12 秒)。

%Generate data to plot
N = 100;
M = 5000;
[X, Y] = meshgrid(linspace(0,1,N),linspace(0,1,M));
md = [X(:) Y(:) ones(M*N,1)];
%Send to gnuplot
in = popen("gnuplot",'w');
fputs(in, "set term pdfcairo\n");
fputs(in, "set output 'out.pdf'\n");
mkfifo("/tmp/mypipe", 438)
fputs(in, "splot '/tmp/mypipe'\n");
save('-ascii','/tmp/mypipe','md');
system('rm /tmp/mypipe');
fputs(in, "quit\n");
fclose(in);

【讨论】:

    猜你喜欢
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多