Вызов функций MATLAB из python - PullRequest
51 голосов
/ 21 мая 2010

Можно ли запускать функции MATLAB из Python? Я ищу в Интернете, я мог только найти PyMat. Плохо то, что скомпилированная версия поддерживает только Python2.2, а я использую 2.6. Поэтому я попытался загрузить исходный код, чтобы я мог скомпилировать его для себя. Но я не могу скомпилировать его, VC ++ express, похоже, не имеет необходимых функций для его компиляции. У кого-нибудь есть версия компиляции для ПК? или какие-нибудь заменители PyMat? Спасибо

Ответы [ 9 ]

33 голосов
/ 20 мая 2014

Я знаю, что это старый вопрос, и на него дан ответ. Но я искал то же самое (для Mac) и обнаружил, что существует довольно много вариантов с разными методами взаимодействия с matlab и разными уровнями зрелости. Вот что я нашел:

pymat

Низкоуровневый интерфейс к Matlab, использующий движок matlab (libeng) для связи (в основном это библиотека, которая поставляется с matlab). Модуль должен быть скомпилирован и связан с libeng.

http://pymat.sourceforge.net
Последнее обновление: 2003

pymat2

Несколько недолгое продолжение развития пимата. Кажется, работает на Windows (в том числе 64-разрядных), Linux и Mac (с некоторыми изменениями).

https://code.google.com/p/pymat2/
Последнее обновление: 2012

mlabwrap

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

mlab.plot(x, y, 'o')

http://mlabwrap.sourceforge.net
Последнее обновление: 2009

MLab

Переупаковка mlabwrap. По сути, он заменяет код c ++, который связывается с libeng в mlabwrap , с модулем python ( matlabpipe ), который связывается с matlab через канал. Основным преимуществом этого является то, что он не нуждается ни в какой компиляции.

К сожалению, пакет в настоящее время содержит несколько ошибок и, похоже, не работает на Mac вообще. Я сообщил о некоторых из них, но в конце концов сдался. Кроме того, будьте готовы ко множеству хитрости и куче довольно уродливых хаков, если вам нужно перейти к исходному коду ;-) Если это станет более зрелым, это может быть одним из лучших вариантов.

https://github.com/ewiger/mlab
последнее обновление: 2013

pymatlab

Более новый пакет (2010), который также взаимодействует с Matlab через libeng. В отличие от других пакетов, этот загружает библиотеку движка через ctypes , поэтому компиляция не требуется. Она не лишена недостатков, но все еще поддерживается, и обнаруженные мной проблемы (специфичные для 64-битного Mac) должны быть достаточно легкими для исправления.
( edit 2014-05-20 : похоже, что эти проблемы уже исправлены в исходном коде, поэтому с 0.2.4 все должно быть в порядке)

http://pymatlab.sourceforge.net
последнее обновление: 2014

питон-Matlab-мост

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

http://arokem.github.io/python-matlab-bridge
последнее обновление: 2014

29 голосов
/ 10 августа 2010

Другой вариант: Mlabwrap:

Mlabwrap - это высокоуровневый мост между Python и Matlab®, который позволяет Matlab выглядеть как обычная библиотека python.

Хорошо работает с массивами numpy. Пример с домашней страницы:

>>> from mlabwrap import mlab; from numpy import *
>>> xx = arange(-2*pi, 2*pi, 0.2)
>>> mlab.surf(subtract.outer(sin(xx),cos(xx)))
25 голосов
/ 21 мая 2010

PyMat выглядит как заброшенный.

Я предполагаю, что вы работаете в Windows, поэтому вы всегда можете сделать самый простой подход и использовать COM-интерфейс Matlab:

>>> import win32com.client
>>> h = win32com.client.Dispatch('matlab.application')
>>> h.Execute ("plot([0 18], [7 23])")
>>> h.Execute ("1+1")
u'\nans =\n\n     2\n\n'

Подробнее здесь

10 голосов
/ 13 июля 2012

Существует мост python-matlab, который уникален в том смысле, что Matlab работает в фоновом режиме, поэтому у вас нет затрат на запуск при каждом вызове функции Matlab. https://github.com/jaderberg/python-matlab-bridge

это так же просто, как скачать и следующий код:

from pymatbridge import Matlab
mlab = Matlab(matlab='/Applications/MATLAB_R2011a.app/bin/matlab')
mlab.start()
res = mlab.run('path/to/yourfunc.m', {'arg1': 3, 'arg2': 5})
print res['result']

где содержимое файла yourfunc.m будет примерно таким:

%% MATLAB
function lol = yourfunc(args)
    arg1 = args.arg1;
    arg2 = args.arg2;
    lol = arg1 + arg2;
end
3 голосов
/ 12 марта 2018

2 варианта для рассмотрения:

  1. Следуйте официальным документам MATLAB: Создайте приложение Python с кодом MATLAB .Это создаст библиотеку Python, включающую среду выполнения MATLAB, которую вы можете вызывать из своего кода Python.

  2. Запустите ваш код MATLAB в GNU Octave и затем вызовите его из Pythonиспользуя Oct2Py

3 голосов
/ 11 мая 2015

Более новые версии Matlab, кажется, предоставляют модуль, который позволяет вам вызывать функции Matlab из Python. см. здесь и здесь .

3 голосов
/ 20 июля 2014

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

matlab_wrapper

Преимущество matlab_wrapper в том, что это чистая библиотека Python, и вам не нужно ничего компилировать. Работает в GNU / Linux, Windows и OSX.

https://github.com/mrkrd/matlab_wrapper

Отказ от ответственности: я автор matlab_wrapper

3 голосов
/ 28 июля 2010
2 голосов
/ 12 ноября 2015

Вы можете использовать официальный движок matlab, установив Matlab, а затем собрав python engine из его внешних файлов. Вы можете проверить руководство сайта ниже: --- Спасибо за совет в первом комментарии этого ответа --- краткий важный шаг (на платформе Windows, другие могут быть проверены в URL ниже): 1. Загрузите и установите Matlab, версия должна быть R2014 или новее. 2. откройте окно PowerShell под admin, затем:

cd "matlabroot\extern\engines\python"

3. используйте командную строку ниже для установки:

python setup.py install

Администратор очень важен, иначе вам не удастся его построить.

Для получения дополнительной информации вы можете нажать на официальный стартовый лист ниже: http://cn.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...