在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
我尝试过的事情并没有加快打印过程:
答案 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);