2016-12-08 12 views
0

Экспортируя сетку ниже, потребовалось несколько минут в Октаве, но всего несколько секунд в Matlab (на Ubuntu, Linux Mint и Windows). Что можно сделать, чтобы ускорить процесс в Октаве?Ускорить печать сетки в октаве

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
  • Обновление Octa до 4.2.0
+0

какая ОС вы используете? можете ли вы попробовать самую последнюю версию Octave? (4.2.0) –

+0

Обновили исходное сообщение ОС (Linux mint и Ubuntu). Будет компилировать версию 4.2.0 и посмотреть, быстрее ли работает код. – stein

+0

У вас есть рабочая настройка для запуска кода выше в разумные сроки? Хотелось бы попытаться имитировать это. – stein

ответ

0

Время работы можно значительно уменьшить, создав pdf напрямую, вместо промежуточного шага eps. Для этого установите графический бэкэнд GNUPLOT

graphics_toolkit('gnuplot') 

и использовать pdfcairo терминал, изменив команду печати на

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

Это было предложено Димитрия в списке Октав помощи. Благодаря!

Вышеуказанное изменение сократило время работы в моей системе от 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);