MATLAB からの MATLAB と Python 間でのデータの受け渡し
MATLAB® で Python® 関数を呼び出すと、Python インターフェイスは Python 言語においてデータを最も適切に表す型に MATLAB 入力データを変換します。また、Python インターフェイスは、返された Python データの一部を MATLAB データ型に変換します。
MATLAB から Python へのデータの受け渡し
MATLAB から Python にデータを渡すと、結果として得られる Python 型は、MATLAB データがスカラー値か配列かによって異なります。
MATLAB から Python へのスカラー値の受け渡し
MATLAB では、Python 関数に入力としてスカラー値を渡すと、Python インターフェイスによってデータが同等の Python データ型に自動的に変換されます。
MATLAB 入力型 | 結果の Python データ型 | 例 |
|---|---|---|
|
| MATLAB での Python 数値変数の使用 |
|
| z = complex(1,2); py.cmath.polar(z) ans =
Python tuple with values:
(2.23606797749979, 1.1071487177940904)
|
|
| |
|
|
n = NaN; py.float(n) ans =
Python float with properties:
imag: 0
real: NaN
nan |
|
|
i = Inf; py.float(i) ans =
Python float with properties:
imag: 0
real: Inf
inf
|
|
| MATLAB での Python str 変数の使用 |
|
| s = string(missing); py.str(s) ans =
Python str with no properties.
None
|
|
|
b = true; py.type(b) ans =
Python type with no properties.
<class 'bool'> |
|
| MATLAB での Python ディクショナリの使用 |
| pandas.DataFrame | MATLAB での Python pandas DataFrame の使用 |
datetime |
| MATLAB での Python datetime 型の使用 |
duration |
| MATLAB での Python duration 型の使用 |
Python オブジェクト — |
| - |
Python 関数専用の関数ハンドル |
| Python 関数 map への Python 関数の受け渡し |
MATLAB から Python への配列データの受け渡し
MATLAB では、MATLAB 配列を Python 関数への入力として渡し、NumPy モジュールが Python 環境で使用可能な場合、Python インターフェイスは自動的に配列を Python NumPy 配列に変換します。Python 関数への入力として MATLAB 配列を渡すときに NumPy モジュールが使用可能でない場合、Python インターフェイスはベクトル入力を行列入力と同様に処理します。つまり、Python インターフェイスはこれらの入力を Python memoryview オブジェクトに変換します。(R2025a 以降)
R2025a より前: NumPy パッケージの有無にかかわらず MATLAB ベクトルを Python 関数に渡すと、Python インターフェイスはベクトルを Python array.array オブジェクトに変換します。
MATLAB 入力配列型 (配列データのみ) | 結果の Python データ型 (NumPy あり) |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 行 |
|
|
|
|
|
| 自動変換なし。 |
NumPy がインストールされておらず、数値 MATLAB 配列が Python に渡された場合、Python インターフェイスは配列の内容を指す memoryview オブジェクトを作成します。この memoryview オブジェクトは Python バッファー プロトコルを実装しており、配列のコピーは作成しません。この例では、MATLAB 配列から作成された memoryview オブジェクトから array.array が作成されます。
mArr = [1,2,3];
pyArr = py.array.array('d',mArr);
MATLAB 型から Python 型への明示的な変換
Python インターフェイスは多次元の MATLAB string データを自動的に変換しませんが、データを Python データ型に明示的に変換できます。
MATLAB 型 | 結果の Python 型 | MATLAB の変換関数 |
|---|---|---|
string 配列 | NumPy |
サポートされていない MATLAB 型
以下の MATLAB 型は、Python ではサポートされていません。
スパース配列
非スカラー
struct配列categoricalcontainers.MapMATLAB オブジェクト
matlab.metadata.Class(py.class)
Python から MATLAB へのデータの受け渡し
Python 関数を MATLAB 内から呼び出すと、関数は任意のデータ型のデータを返すことができます。Python 関数が返すデータ型によっては、Python インターフェイスは出力を MATLAB データ型に自動的に変換する場合があります。Python インターフェイスがデータを自動的に変換しない場合、Python 関数は Python データ型の出力を返します。このデータ型は、手動で MATLAB データ型に変換できます。
Python から MATLAB にスカラー値を返す
Python 関数が次の Python データ型のいずれかのスカラー値を返すと、Python インターフェイスは自動的にその値を次の MATLAB 型に変換します。
Python に表示される Python の戻り値の型 | 結果の MATLAB データ型 |
|---|---|
|
|
| 複素数の |
|
|
datetime |
|
| string |
Python 型から MATLAB 型への明示的な変換
Python 関数が他の型のデータを返した場合、Python インターフェイスはデータを自動的に変換しません。以下の MATLAB 関数を使用して、Python データ型を MATLAB 型に明示的に変換できます。
MATLAB に表示される Python の戻り値の型またはプロトコル | MATLAB の変換関数 | 例 |
|---|---|---|
|
| MATLAB での Python str 変数の使用 |
|
| py.help('datetime.date.__str__')Help on wrapper_descriptor in datetime.date:
datetime.date.__str__ = __str__(self, /) unbound datetime.date method
Return str(self).d = py.datetime.date(...
int32(2020),int32(3),int32(4));
char(d)ans = '2020-3-04' |
|
| MATLAB での Python 数値変数の使用 |
py.bool |
|
x = py.bool(true); double(x) ans =
1
|
|
|
b = py.bytes("MATLAB",'utf-8'); uint8(b) ans = 1×6 uint8 row vector 77 65 84 76 65 66 |
|
| MATLAB での Python 数値変数の使用 |
|
| |
|
| MATLAB での Python list 変数の使用 |
マッピング プロトコルを実装する |
| MATLAB での Python ディクショナリの使用 |
py.pandas.DataFrame |
| MATLAB での Python pandas DataFrame の使用 |
|
| MATLAB での Python datetime 型の使用 |
|
| MATLAB での Python duration 型の使用 |
サポートされていない Python 型
Python enum 型は MATLAB ではサポートされていません。
Python ndarray から MATLAB 配列への変換
Python 関数の出力の型が、numpy.ndarray などの Python バッファー プロトコルを実装する型である場合、MATLAB によって以下が表示されます。
実際の Python 型。
基となるデータ。
対応する MATLAB 変換関数。この関数を使用して、Python オブジェクトを MATLAB 配列に完全に変換します。
たとえば、Python 関数が次の p 配列を返すとします。
p =
Python ndarray:
8 1 6
3 5 7
4 9 2
Use details function to view the properties of the Python object.
Use double function to convert to a MATLAB array.推奨された変換関数を使用して、p を MATLAB 行列 M に変換します。
M = double(p)
M = 3×3
8 1 6
3 5 7
4 9 2
p の Python プロパティに関する特定の情報を取得します。
details(p)
py.numpy.ndarray handle with properties:
T: [1×1 py.numpy.ndarray]
base: [1×1 py.NoneType]
ctypes: [1×1 py.numpy.core._internal._ctypes]
data: [1×3 py.memoryview]
dtype: [1×1 py.numpy.dtype[float64]]
flags: [1×1 py.numpy.flagsobj]
flat: [1×1 py.numpy.flatiter]
imag: [1×1 py.numpy.ndarray]
itemsize: [1×1 py.int]
nbytes: [1×1 py.int]
ndim: [1×1 py.int]
real: [1×1 py.numpy.ndarray]
shape: [1×2 py.tuple]
size: [1×1 py.int]
strides: [1×2 py.tuple]
Methods, Events, SuperclassesPython モジュールが __doc__ 属性でコンテンツを提供する場合、MATLAB はその情報にリンクします。