Main Content

上級トピック

PythonMATLABimport コマンドの理解

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 コード
import textwrap
pS1 = textwrap.wrap('This is a string')
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 コード
import textwrap
pS1 = textwrap.wrap('This is a string')
from textwrap import wrap
pS2 = wrap('another string')
S1 = py.textwrap.wrap('This is a string');
import py.textwrap.wrap
S2 = wrap('another string');
import mymod as mm
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__

参考

|

関連するトピック

外部の Web サイト