主要内容

このペジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

PythonでのMATLABエラのトラブルシュティング

PythonでのMATLABエラ

MATLAB®関数でエラが発生すると,Python®用matlabエンジンはその関数を停止し,matlabが発行した例外を受け取ります。エンジンはエラメッセジを新しいPython例外にコピします。エンジンはPython例外を発行します。

Pythonインタープリターが例外を受け取った場合,インタープリターはMATLABからのエラーメッセージを表示します。エンジンが発行した例外をPythonコドで処理することもできます。エンジンが発行できる例外のタプは,matlab.engine.MatlabEngineおよびmatlab.engine.FutureResultのリファレンスペジを参照してください。

MatlabExecutionError:未定義の関数

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の整数をint64Matlabデタ型に変換します。

数値にいて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のドキュメンテションに予約語のリストが掲載されています。

PythonMATLABセッションを検出できない

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()

関連するトピック