web-dev-qa-db-ja.com

pythonからのMATLAB関数の呼び出し

Python内からMATLAB関数を実行することは可能ですか?インターネットで検索すると、PyMatしか見つかりませんでした。悪いことは、コンパイルされたバージョンがPython2.2のみをサポートし、2.6を使用していることです。それで、ソースコードをダウンロードしようとしたので、自分でコンパイルすることができます。しかし、私はそれをコンパイルすることはできません、VC++ expressはそれをコンパイルするために必要な機能を持っていないようです。誰かがPC用のコンパイルバージョンを持っていますか?またはPyMatの代替品はありますか?ありがとう

51
Hossein

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'

詳細 こちら

25
Mark

これは古い質問であり、回答済みです。しかし、私は同じことを探していました(Macの場合)、matlabとのやり取りの方法が異なる、成熟度のレベルが異なるオプションがかなりあることがわかりました。私が見つけたものは次のとおりです。

pymat

通信にmatlabエンジン(libeng)を使用したMatlabへの低レベルインターフェイス(基本的にmatlabに付属するライブラリ)。モジュールをコンパイルし、libengとリンクする必要があります。

http://pymat.sourceforge.net
最終更新日:2003

pymat2

Pymat開発のやや短期間の継続。 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の再パッケージ化の努力。基本的に、mlabwrapの 'libeng'にリンクするc ++コードを、python module( matlabpipe )パイプを介してmatlabと通信しますこれの主な利点は、いかなる種類のコンパイルも必要ないことです。

残念ながら、このパッケージには現在いくつかのバグがあり、Macではまったく動作しないようです。それらのいくつかを報告しましたが、最終的にはあきらめました。また、ソースコードにアクセスする必要がある場合は、多くの策略とかなりprettyいハックに備えてください;-)これがより成熟した場合、最良の選択肢の1つになる可能性があります。

https://github.com/ewiger/mlab
最終更新:2013

pymatlab

libengを介してMatlabと対話する新しいパッケージ(2010)。他のパッケージとは異なり、これは ctypes を介してエンジンライブラリをロードするため、コンパイルは不要です。その欠陥がないわけではないが、まだ維持されており、私が見つけた(64ビットMac固有の)問題は修正するのに十分簡単なはずです。
2014-05-20を編集:これらの問題はソースで既に修正されているようで、0.2で問題ないはずです。 4)

http://pymatlab.sourceforge.net
最終更新:2014

python-matlab-bridge

また、まだアクティブに維持されている新しいパッケージ。何らかのソケットを介してMatlabと通信します。残念ながら、公開されている機能は少し制限されています。パラメータとして構造体をとる関数を呼び出す方法がわかりませんでした。インストールが簡単なzmq、pyzmq、IPythonが必要です。

http://arokem.github.io/python-matlab-bridge
最終更新:2014

33
Lukas

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
10
Max Jaderberg

Lukasによる優れた要約にもう1つのオプションを追加したいと思います。

matlab_wrapper

Matlab_wrapperの利点は、純粋なPythonライブラリであり、何もコンパイルする必要がないことです。GNU/ Linux、WindowsおよびOSXで動作します。

https://github.com/mrkrd/matlab_wrapper

免責事項:私はmatlab_wrapperの著者です

3
user3785802

このページを参照してください: オープンソースのMATLAB®-to-Python®コンパイラ

3
ying17zi

Matlabをインストールし、その外部ファイルからpythonエンジンをビルドすることにより、公式のmatlabエンジンを使用できます。以下のガイドWebサイトを確認できます。---この最初のコメントのアドバイスをありがとう答え---基本的な手順の概要は次のとおりです(Windowsプラットフォームでは、他のURLは以下のURLで確認できます):1. matlabをダウンロードしてインストールします。バージョンはR2014以降である必要があります。 :

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

2
H.S.Xu

matlabの新しいバージョンは、python内からmatlab関数を呼び出すことができるモジュールを提供しているようです。 here および here を参照してください。

2
user3820991

考慮すべき2つのオプション:

  1. 公式のMATLABドキュメントに従ってください: MATLABコードでPythonアプリケーションを作成 。これにより、Pythonコード内から呼び出すことができるMATLABランタイムを含むPythonライブラリが作成されます。

  2. MATLABコードを GNU Octave で実行してから、 Oct2Py を使用してPythonから呼び出します

2
Ron Kalian