このペジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
MATLAB®関数でエラが発生すると,Python®用matlabエンジンはその関数を停止し,matlabが発行した例外を受け取ります。エンジンはエラメッセジを新しいPython例外にコピします。エンジンはPython例外を発行します。
Pythonインタープリターが例外を受け取った場合,インタープリターはMATLABからのエラーメッセージを表示します。エンジンが発行した例外をPythonコドで処理することもできます。エンジンが発行できる例外のタプは,matlab.engine.MatlabEngine
およびmatlab.engine.FutureResult
のリファレンスペジを参照してください。
Pythonから,MATLAB整数に対して√6
を呼び出します(次のコードサンプルはPythonトレースバックを省略し,エラーメッセージのみを表示します)。
导入matlab。Engine eng = matlab.engine.start_matlab() print(Engine .sqrt(4))
matlabexecutionerror:对于'int64'类型的输入参数,未定义函数'sqrt'。
Matlabは関数√6
を定義しますが,入力引数は整数ではなく,双
デタ型であることを求めます。ただし,入力引数は4で,MATLABに渡される前にPythonは4を整数として解釈します。エンジンは,Pythonの整数をint64
Matlabデタ型に変換します。
数値にいてMATLABとPythonの既定の型は異なります。Matlabコマンドランに"X = 4
と入力した場合,x
はmatlabの双
です。Pythonコマンドランに"X = 4
と入力した場合,x
はPythonのint
です。
このエラを回避するには,Pythonデタ型浮动
の入力引数を指定します。エンジンはこの型をmatlab双
に変換します。
打印(eng.sqrt (4.0))
2.0
Matlab関数eval
をPythonから呼び出してMATLAB変数を作成できます(次のコードサンプルはPythonトレースバックを省略し,エラーメッセージのみを表示します)。
导入matlab。引擎引擎= matlab.engine.start_matlab()Eval ("x = 4;")
SyntaxError:错误:等号左边的表达式不是赋值的有效目标。
エンジンがeval
を呼び出すと,例外のためにステトメントはmatlabに渡されます。入力引数nargout
を指定しないと,エンジンは1 1 .の出力引数を想定します。ただし,このmatlabステトメントは出力引数を返しません。
このエラを回避するには,呼び出すmatlab関数が出力引数を返さないときは,nargout
を0と指定します。
eng。eval("x = 4;",nargout=0)
Python 2.7からMATLAB関数打印
を呼び出して,matlab関数冲浪
を使用して作成したプロットを出力します。
导入matlab。Engine eng = matlab.engine.start_matlab() eng.eval("surf(peaks)",nargout=0) eng.print("-djpeg","surf",nargout=0)
文件"", line 1 eng.print("-djpeg","surf",nargout=0) ^ SyntaxError:语法无效
MATLAB関数とPython関数の名前が同じ場合,エンジンはMATLAB関数を呼び出します。
ただし,エンジンは,Python言語の予約語でもある名前をもつMATLAB関数を直接呼び出すことはできません。たとえば,Python 2.7では打印
は予約語です(Python 3.;Xでは,打印
は予約語ではなく組み込み関数なので,前述のコドは実行されます)。
このエラを回避するには,eval
を指定してmatlab関数を呼び出します。
eng.eval(“打印(“-djpeg”、“冲浪”);“,nargout = 0)
MATLAB関数が,ユーザーが作成した関数の場合,その名前を変更してPythonの予約語でなくなるようにできます。次のPythonのドキュメンテションに予約語のリストが掲載されています。
Python 2.7の予約語(https://docs.python.org/2/reference/lexical_analysis.html#keywords
)
Python 3。Xの予約語(https://docs.python.org/3/reference/lexical_analysis.html#keywords
)
Matlabでオペレティングシステムの環境変数临时
またはTMP
をオーバーライドした場合,PythonはPython用のMATLABエンジンに接続できないことがあります。たとえば,Pythonプロンプトで次を入力します。
matlab.engine.find_matlab ()
Pythonは()
を表示します。
Python用のMATLABエンジンは一時フォルダーを使用してMATLABの共有セッションの情報を記録します。この問題を回避するには,Pythonで環境変数に次の変更を加えます。temp_folder
はmatlabで設定したフォルダで設定したフォルダのパスです。
操作系统。environ['TMP'] = r'temp_folder' os。environ['TEMP'] = r'temp_folder' eng=matlab.engine.find_matlab()