Main Content

パッケージ化された MATLAB 関数の呼び出し

initialize() から返された Python® オブジェクトを使用して、コンパイルされた MATLAB® 関数を呼び出します。

result1,...resultN = my_client.function_name(in_args, nargout=nargs,
                                             stdout=out_stream,
                                             stderr=err_stream)
  • my_clientinitialize() から返されたオブジェクトの名前

  • function_name — 呼び出す関数の名前

  • in_args — 入力引数のコンマ区切りリスト

  • nargs — 予期される結果の数。既定値は 1 です。

  • out_stream — コンソール出力を受け取る Python StringIO オブジェクト。既定では、出力はコンソールに送られます。

  • err_stream — エラー出力を受け取る Python StringIO オブジェクト。既定では、出力はコンソールに送られます。

関数呼び出しの左側の各変数には、単一の戻り値が入ります。

メモ

関数呼び出しの左側に指定した変数の数が nargs より少ない場合、最後にリストされた変数に残りの結果のリストが含まれます。以下に例を示します。

result1, result2 = myMagic.triple(5,nargout=3)

単一の出力をもつ MATLAB 関数の呼び出し

パッケージ mutations の MATLAB 関数 result = mutate(m1, m2, m3) を呼び出すには、以下のコードを使用します。

import mutations
import matlab

myMutator = mutations.initialize()

m1 = matlab.double([1,2,3])
m2 = matlab.double([10,20,30])
m3 = matlab.double([100,200,300])

result = myMutator.mutate(m1,m2,m3)

出力がゼロ個の MATLAB 関数の呼び出し

パッケージ mutations の MATLAB 関数 mutate(m1,m2,m3) を呼び出すには、以下のコードを使用します。

import mutations
import matlab

myMutator = mutations.initialize()

m1 = matlab.double([1,2,3])
m2 = matlab.double([10,20,30])
m3 = matlab.double([100,200,300])

myMutator.mutate(m1,m2,m3,nargout=0)

個別変数としての複数の結果の受け取り

パッケージ copier の MATLAB 関数 c1,c2 = copy(o1,o2) を呼び出すには、以下のコードを使用します。

>>> import copier
>>> import matlab
>>> myCopier = copier.initialize()
>>> c1,c2 = myCopier.copy("blue",10,nargout=2)
>>> print(c1)
"blue"
>>> print(c2)
10

単一のオブジェクトとしての複数の結果の受け取り

パッケージ copier の MATLAB 関数 copies = copy(o1,o2) を呼び出すには、以下のコードを使用します。

>>> import copier
>>> import matlab
>>> myCopier = copier.initialize()
>>> copies = myCopier.copy("blue",10,nargout=2)
>>> print(copies)
["blue",10]

バックグラウンドでの MATLAB 関数の呼び出し

パッケージ sumwrap の MATLAB 関数 sumwrap を非同期的に呼び出すには、以下のコードを使用します。

>>> import sumwrap
>>> import matlab
>>> sw = sumwrap.initialize()
>>> a = matlab.double([[1, 2],[3, 4]])
>>> future = sw.sumwrap(a, 1, background=True)
>>> future.result()
matlab.double([[4.0,6.0]])

メモ

Python を呼び出すパッケージ化された MATLAB 関数を呼び出した場合、Python が InProcess モードで実行されていると次のエラーが発生します。

When using MATLAB Compiler SDK, Python libraries can be called from MATLAB only after pyenv is called with the ''ExecutionMode'' argument set to ''OutOfProcess''.
ただし、Python が OutOfProcess モードで実行されている場合は、意図したとおりに関数が実行されます。

関連するトピック