2014-08-21 30 views
3

У меня есть сценарий MATLAB, например:Запуск скомпилирован MATLAB из питона

function mat_foo(varargin) 
    params.x = 'aaa'; 
    params = parse_input(params, varargin); 
    disp(params.x); 
end 

parse_input функция У меня есть которые преобразуют данные из varargin и переопределить значения по умолчанию в 'params' структуры.

Я собирал эту функцию, и я хочу, чтобы вызвать его из питона, я делаю это следующим образом:

subprocess.check_call(['$/mat_foo.app/Contents/MacOS/applauncher x bbb'], shell=True) 

params.x Это устанавливает для 'bbb' и работает хорошо.

Моя проблема в том, что каждый раз, когда я хочу вызвать скомпилированный MATLAB, он инициализирует MCR и занимает около 8-10 секунд. Мой вопрос в том, есть ли способ инициализировать MCR один раз и использовать его много раз быстрее? Я использую MATLAB R2013a и python 2.7.5 на OSX

+0

Я видел скомпилированный код matlab, вызываемый из php без 10 секунд ожидания при каждом вызове. Поэтому, хотя я не знаю, как его достичь, это определенно возможно. Чтобы устранить невероятное, вы могли бы проверить, возникает ли проблема с функцией треугольника (которую вы можете показать здесь как воспроизводимый пример). –

+0

@DennisJaheruddin: Возможно, код был сгенерирован с использованием matlab-кодера, такой код не требует MCR. – Daniel

+0

@ Daniel Код был составлен мной, поэтому он определенно требует MCR. Я просто не знаю подробностей о том, как это называется, но я думаю, что это можно считать доказательством того, что это можно сделать. –

ответ

1

Возможно скомпилировать ваш код в общей библиотеке, как описано here. Вы можете загрузить эту библиотеку в питоне с

mymatlab = cdll.LoadLibrary("mymatlab_library.so") 

и инициализировать и загрузить MCR путем вызова функции

mymatlab.initializeMyLibrary() 

, что не может сделать ничего или только печатает текст на консоль с disp функции от Matlab.

Последующие вызовы функций в вашу библиотеку должны выполняться немедленно.

См. Также Mathworks discussion.

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