2015-12-17 2 views
2

Я поддерживаю программный пакет, который автоматизирует прием данных. Когда исходные данные импортируются, они отображаются и некоторые графики данных сохраняются на диск. К сожалению, функция print значительно замедляет мою работу.Оптимизация функции печати в Matlab

Вот разбивка исполнения кода

Script  Time 
myscript  9.091s 
uichoosefile 3.567s 
print  4.178s 
legend  0.751s 

Только около 3/4s моего времени выполнения в режиме реального времени обработки и print является самым большим timesink здесь.

Внутри print две линии занимают почти 100% времени

Line Code        Time 
212 pj = pj = alternatePrintPath(pj); 3.173s 
148 drawnow;       0.751s 

Как я могу создать оптимизированную версию print, не упираются этими двумя линиями? Простые процедуры оптимизации, такие как снижение разрешения графики, нежелательны.

+0

'print' - это большая функция, которая делает много вещей. Как вы это называете? Просьба привести пример кода, который демонстрирует, что вы пытаетесь сделать. – horchler

+0

Вам нужно сохранить графику в растровом формате (PNG, JPG или, тем не менее, экспортировать их), или вы можете просто сохранить файл .fig с помощью hgsave и перенести это на более поздний этап? – txpaulm

+0

@txpaulm, к сожалению, у меня нет роскоши ограниченных векторных или растровых форматов. При попадании данных также выставляется файл конфигурации для клиента, который определяет, среди прочего, форматы доставки для графиков их данных, PNG, PDF, SVG, EPS и т. Д. Наиболее типичным сценарием является PDF + PNG.Печать очень затруднительна, когда команды выдаются во время ее выполнения, поэтому я не считаю, что откладывание экономии очень жизнеспособно; он может сломаться, если, например, оператор нажимает во время процедуры сохранения. –

ответ

1

Matlab на самом деле довольно особенный в том, что довольно легко оптимизировать свои внутренние функции. I did this до ode15s в наборе инструментов systems biology modelling, который я написал.

Это, как вы делаете это сами:

  1. Создайте новую папку. Я назову его image_print.
  2. Добавить эту папку в путь Matlab, так что вы можете использовать его в любом месте addpath('image_print')
  3. Скопируйте функцию вы хотите оптимизировать в новую папку image_print и дать файлу новое имя. Я назову его printimage.m.
  4. В папке с исходной функцией будет папка с именем private. Скопируйте эту папку в новую папку image_print. Сохраните это имя как private.

Теперь вы можете использовать printimage и оптимизировать его, не завинчивая остальную часть Matlab. Что на самом деле помогает, будет полностью зависеть от вашего фактического рабочего процесса и потребует достаточного количества умения с вашей стороны. Вы начинаете с нужного места, используя профилировщик. В принципе, вам придется выяснить через пробную версию и ошибку, что делают медленные шаги, а затем посмотреть, есть ли более быстрый способ сделать это специально для вашей работы. Оригинальная функция очень общая, поэтому вы сможете вырезать целые разделы. Не забывайте, что вы также можете изменять функции в private.

Бонусное предложение: поскольку вы хотите сохранить фигуры на диск, вы можете сосредоточиться на том, чтобы не тратить время на фактическое рисование на экране. Вы могли бы полностью прокомментировать строку drawnow, но, пожалуйста, сообщите о том, что на самом деле происходит.

+0

, и вы называете это довольно легко? .... * повторяйте до тех пор, пока все отсутствующие функции * ... Я думаю, вы имели в виду это все как саркастическое замечание. Я надеюсь, что – percusse

+0

@percusse На другом языке, на котором можно изменить 'print' за 10 минут. – drhagen

+0

Python, Javascript, R. Если вы сделаете это через 10 минут в Matlab, я начну использовать его снова – percusse

Смежные вопросы