上級トピック
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__ |