Вызов функций MATLAB из python

43

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

  • 7
    numpy твой друг, когда Matlab разочаровал тебя
Теги:
visual-c++

8 ответов

22
Лучший ответ

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

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

>>> 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'

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

  • 0
    Эй, есть ли способ заставить скрипт Python остановиться, если команда MATLAB выдает ошибку или даже распечатывает ошибку? Я заметил, что Python игнорирует ошибки по умолчанию и проходит через скрипт. -Спасибо
  • 0
    является оператором matlab для запуска исполняемого файла сценария с помощью этой команды?
28

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

pymat

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

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

pymat2

Несколько короткое продолжение развития пиматов. Кажется, нужно работать с окнами (включая 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. В основном он заменяет код С++, который ссылается на "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 г.

Python-Matlab-мост

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

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

  • 2
    +1 за ваш пост. Вопрос старый (как вы сказали), но все еще актуален. Старые ответы устарели, так как есть много возможностей для улучшения в перекрестных разговорах Matlab-Python.
  • 0
    Такой отличный ответ !!! Большое спасибо за то, что опубликовал это!
Показать ещё 1 комментарий
28

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

Mlabwrap - это высокоуровневый питон для моста 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)))
  • 1
    Эта страница содержит шаги для начала работы с mlabwrap
  • 0
    Обратите внимание, что есть также mlab , «попытка переупаковки [mlabwrap], чтобы сделать вещи современными».
Показать ещё 1 комментарий
9

Существует мост 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
  • 0
    Макс, ты знаешь, есть ли способ передать несколько аргументов в функцию matlab без использования словаря? Это было бы очень удобно! Спасибо!
3

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

matlab_wrapper

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

https://github.com/mrkrd/matlab_wrapper

Отказ от ответственности: я являюсь автором matlab_wrapper

3
  • 0
    Поддерживает ли он только до Python 2.6?
  • 1
    @ Франция, извини, я не знаю! Я только что попробовал несколько простых примеров около двух лет назад. Я использовал и Matlab и Python. Я просто придерживаюсь определенных структур данных и передаю данные между ними.
1

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

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

  • 0
    Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными в случае изменения связанной страницы. - Из обзора
  • 0
    @jezrael Спасибо за ваш совет, я изменю свой ответ
0

Новые версии matlab, похоже, предоставляют модуль, который позволяет вам вызывать функции matlab изнутри python. здесь здесь и здесь.

  • 0
    Я написал учебник о том, как использовать его с классами - cloud-rocket.com/2016/08/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню