Вставить функцию из файла Matlab MEX непосредственно в Python

Я использую собственный файл Matlab MEX для импорта некоторых результатов моделирования в Matlab (конечно, никакого исходного кода не существует!). Интерфейс с Matlab на самом деле очень прост, так как существует единственная функция, возвращающая структуру Matlab. Я хотел бы знать, есть ли способ вызвать эту функцию в MEX-файле непосредственно из Python без использования Matlab?

Что я имею в виду, например, используя что-то вроде SWIG для импорта функции C в Python, предоставляя собственную оболочку Matlab-обертки вокруг нее … Кстати, я знаю, что с scipy.io.loadmat уже можно читать Matlab binary * .mat, но я не знаю, совпадает ли представление данных в файле mat с внутренним представлением в Matlab (в этом случае оно может быть полезно для оболочки MEX).

Идея, конечно же, была бы в состоянии использовать функцию, предусмотренную в MEX, без установки Matlab, присутствующей в системе.

Благодарю.

  • Встраивание Python в MATLAB
  • 4 Solutions collect form web for “Вставить функцию из файла Matlab MEX непосредственно в Python”

    Если я не понимаю что-то о том, как работает Matlab или о вашем вопросе, это очень маловероятно. С технической точки зрения любое решение должно быть полнофункциональной, бинарной совместимой ошибкой для ошибки, возможностью повторной реализации библиотеки Matlab C (реализация mxGetPr, mxGetN и т. Д.), Но привязка к Python.

    Позвольте мне изменить свой собственный ответ, чтобы сказать следующее: если у вас есть лицензия MATLAB, есть отличный пакет MLAB wrap, который делает хотя бы часть того, что вы хотите.

    Вы можете создавать автономные общие библиотеки из кода Matlab, например http://www.mathworks.com/help/toolbox/compiler/mbuild.html . Этим вы должны иметь возможность звонить из python. Но вам нужен компилятор Matlab, однако похоже, что пробная версия доступна бесплатно.

    См. Также эту тему stackoverflow .

    1. Вы можете создать библиотеку из файла mex, как указал Мауро
    2. Вы можете безопасно использовать scipy.io.loadmat, представление данных:

    из:

    http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html

    Возврат:

    mat_dict: dict

    словарь с именами переменных в виде ключей и загруженные матрицы как значения

    Загруженные матрицы сохраняются так, как вы их сохранили, т.е. представление данных должно быть последовательным.

    Мексовая функция – это api, которая позволяет Matlab (т.е. программе matlab) вызывать функцию, написанную в c / c ++. Эта функция, в свою очередь, может вызывать собственные функции Matlab. Таким образом, функция mex будет связана с библиотеками Matlab. Таким образом, вызов функции mex непосредственно из программы Python без библиотек Matlab не представляется возможным (и в этом нет смысла).

    Из соображений почему была создана функция mex в первую очередь? Должно ли быть сделано для некоторых библиотек не-matlab c (или c-кода) для пользователей Matlab или было бы скрыть некоторый код matlab-кода proprietery, все еще делая его доступным для пользователей Matlab? Если это первый случай, то вы можете попросить владельцев mex-функции предоставить его в не-мкс-динамической форме lib, которую вы можете включить в другую программу c или python. Это должно быть легко, если функция mex не зависит от внутренних функций Matlab.

    Другие выше упомянули компилятор matlab … да, вы можете включить функцию mex в автономном двоичном коде, который можно вызывать из unix (таким образом, из python, но как вызов unix), если вы используете Matlab Compiler для создания такого двоичного файла. Для этого потребуется развертывание двоичного файла вместе со средой выполнения Matlab. Это не совсем то же самое, что вызывать функцию непосредственно из python – например, нет возвращаемых значений.

    Python - лучший язык программирования в мире.