以八度为单位加速网格打印

时间:2016-12-08 13:44:51

标签: octave mesh

在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中设置多个不同备选方案之间的终端
  • 在绘图和打印之前运行图形('可见','关闭')
  • 将Octave更新为4.0.2
  • 将Octave更新为4.2.0

1 个答案:

答案 0 :(得分:0)

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

graphics_toolkit('gnuplot')

并通过将print命令更改为

来使用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);