上級トピック
Python と MATLAB の import
コマンドの理解
import
ステートメントの動作は、MATLAB® と Python® で同じではありません。Python では、pythonmodule
の関数にアクセスする前に、"import pythonmodule
" ステートメントを使用する必要があります。MATLAB では、pythonmodule
から関数 functionname
を呼び出すには、「py.pythonmodule.functionname
」と入力します。
MATLAB では、ステートメント "import py.pythonmodule.functionname
" を使用すると、後続のコードで関数を呼び出すたびに「py.pythonmodule.
」と入力する必要がなくなります。ただし、import
は、functionname
が既存の MATLAB 関数の名前でない場合にのみ使用してください。
MATLAB での Python モジュールの読み込み
Python コードでは、import
ステートメントを使用してコードを読み込み、アクセス可能にします。MATLAB は、モジュール名と関数名の先頭に py.
が入力された場合、自動的に Python を読み込みます。次のコードは、Python モジュール textwrap
で関数 wrap
を呼び出す方法を示しています。
Python コード | MATLAB コード |
---|---|
| S1 = py.textwrap.wrap('This is a string');
|
注意
MATLAB では、以下を入力しないでください。
import pythonmodule
または、
import py.*
このようにすると、同じ名前の MATLAB 関数と Python 関数がある場合は必ず、MATLAB は Python 関数を呼び出します。これは予期しない動作の原因になります。
誤ってこの import
コマンドを入力した場合は、次の MATLAB コマンドを呼び出さなければなりません。
clear import
クラス名または関数名の短縮
Python の from...import
ステートメントを使用すると、完全修飾名を使用せずにモジュールを参照できます。MATLAB では、関数 import
を使用します。以下のコードは、Python モジュール textwrap
で関数 wrap
を参照する方法を示しています。wrap
という MATLAB 関数はなく、名前が競合する可能性がないため、呼び出し構文は関数 import
を使用して短縮できます。このコマンドを呼び出した後に、名前空間 (py
) 名およびモジュール (textwrap
) 名を入力する必要はありません。
Python コード | MATLAB コード |
---|---|
| S1 = py.textwrap.wrap('This is a string'); import py.textwrap.wrap S2 = wrap('another string'); |
| mm = py.importlib.import_module('mymod'); % Use mm as an alias % to access functionality % in mymod |
Python 関数のヘルプ
Python 機能の詳細な説明は、外部リソース、特にhttps://www.python.orgを参照してください。Python のドキュメンテーションにはさまざまなバージョンがあるため、必ずご使用のシステムのバージョンを参照してください。MATLAB のドキュメンテーションにある多くの例は、Python 標準ライブラリの関数を参照します。
サードパーティ製またはユーザー定義の Python モジュールで関数を使用するには、そのモジュールのインストール方法とその機能の詳細について、そのベンダーの製品ドキュメンテーションを参照してください。
コマンド MATLAB py.help
を使用すると、www.python.org/doc
の Python ヘルプが表示されます。モジュールとクラスのヘルプは広範囲に及ぶことがあり、MATLAB コマンド ウィンドウに表示すると使用しにくい可能性があります。
モジュール
py.help('textwrap')
クラス
py.help('textwrap.TextWrapper')
クラスのメソッド
py.help('textwrap.TextWrapper.wrap')
関数
py.help('textwrap.fill')
MATLAB に Python Error:
で始まるエラー メッセージが表示された場合、その詳細については Python のドキュメンテーションを参照してください。
メモ
タブ補完では、使用可能な Python 機能は表示されません。
MATLAB では、入力引数なしで py.help
を呼び出す対話型の Python ヘルプを使用することはできません。
MATLAB と名前が競合する Python メソッドの呼び出し
Python メソッド名が、MATLAB 基底クラスまたは予約済み関数のシールド メソッド名である場合、MATLAB はメソッド名を変更します。新しい名前は文字 x
で始まり、元の名前の 1 文字目が大文字に変更されます。たとえば、MATLAB は Python メソッド cat
の名前を xCat
に変更します。予約済みメソッドのリストは、既定の動作を変更するメソッドを参照してください。
メソッド名が MATLAB キーワードの場合、MATLAB は matlab.lang.makeValidName
を呼び出してメソッド名を変更します。キーワードのリストは、iskeyword
を参照してください。
生成された名前が重複している場合、MATLAB は matlab.lang.makeUniqueStrings
を使用してメソッド名を変更します。
Python 関数 eval
の呼び出し
この例では、Python の eval
コマンドを使用して式 x+y
を評価する方法を説明します。eval
のヘルプを読みます。
py.help('eval')
Help on built-in function eval in module __builtin__: eval(...) eval(source[, globals[, locals]]) -> value Evaluate the source in the context of globals and locals. The source may be a string representing a Python expression or a code object as returned by compile(). The globals must be a dictionary and locals can be any mapping, defaulting to the current globals and locals. If only globals is given, locals defaults to it.
式を評価するには、globals
名前空間パラメーターに Python dict
値を渡します。
x
値と y
値の Python dict
変数を作成します。
workspace = py.dict(pyargs(x=1,y=6))
workspace = Python dict with no properties. {'y': 6.0, 'x': 1.0}
式を評価します。
res = py.eval('x+y',workspace)
res = 7
あるいは、変数を割り当てずに 2 つの数値を加算するために、空の dict
値を globals
パラメーターに渡します。
res = py.eval('1+6',py.dict)
res = Python int with properties: denominator: [1×1 py.int] imag: [1×1 py.int] numerator: [1×1 py.int] real: [1×1 py.int] 7
呼び出し可能な Python オブジェクトの実行
呼び出し可能な Python オブジェクトを実行するには、関数 feval
を使用します。たとえば、Python クラスのインスタンス obj
が呼び出し可能な場合、Python 構文 obj(x1, ..., xn)
を次のいずれかの MATLAB ステートメントで置換します。
feval(obj,x1, ..., xn)
obj(x1, ..., xn)
MATLAB における Python 演算子の表記
MATLAB では、次のオーバーロードされた演算子をサポートしています。
Python の演算子記号 | Python メソッド | MATLAB メソッド |
---|---|---|
+ (バイナリ) | __add__ , __radd__ | plus , + |
- (バイナリ) | __sub__ , __rsub__ | minus , - |
* (バイナリ) | __mul__ , __rmul__ | mtimes , * |
/ | __truediv__ , __rtruediv__ | mrdivide , / |
== | __eq__ | eq , == |
> | __gt__ | gt , > |
< | __lt__ | lt , < |
!= | __ne__ | ne , ~= |
>= | __ge__ | ge , >= |
<= | __le__ | le , <= |
- (単項) | __neg__ | uminus , -a |
+ (単項) | __pos__ | uplus , +a |
次の Python 演算子はサポートされていません。
Python の演算子記号 | Python メソッド |
---|---|
% | __mod__ , __rmod__ |
** | __pow__ , __rpow__ |
<< | __lshift__ , __rlshift__ |
>> | __rshift__ , __rrshift__ |
& | __and__ , __rand__ |
^ | __xor__ , __rxor__ |
| | __or__ , __ror__ |
// (バイナリ) | __floordiv__ , __rfloordiv__ |
+= (単項) | __iadd__ |
-= (単項) | __isub__ |
*= (単項) | __imul__ |
/= (単項) | __itruediv__ |
//= (単項) | __ifloordiv__ |
%= (単項) | __imod__ |
**= (単項) | __ipow__ |
<<= (単項) | __ilshift__ |
>>= (単項) | __irshift__ |
&= (単項) | __iand__ |
^= (単項) | __ixor__ |
|= (単項) | __ior__ |
~ (単項) | __invert__ |