メインコンテンツ

MATLAB からの MATLABPython 間でのデータの受け渡し

MATLAB® で Python® 関数を呼び出すと、Python インターフェイスは Python 言語においてデータを最も適切に表す型に MATLAB 入力データを変換します。また、Python インターフェイスは、返された Python データの一部を MATLAB データ型に変換します。

MATLAB から Python へのデータの受け渡し

MATLAB から Python にデータを渡すと、結果として得られる Python 型は、MATLAB データがスカラー値か配列かによって異なります。

MATLAB から Python へのスカラー値の受け渡し

MATLAB では、Python 関数に入力としてスカラー値を渡すと、Python インターフェイスによってデータが同等の Python データ型に自動的に変換されます。

MATLAB 入力型
(スカラー値のみ)

結果の Python データ型

double (実数)
single (実数)

float (既定) または int

MATLAB での Python 数値変数の使用

既定では、Python インターフェイスは double 型または single 型を Python float に変換します。ただし、Python 型ヒントに基づく整数値の場合、Python インターフェイスは double 型または single 型を Python int に変換できます。

double (複素数)
single (複素数)

complex

z = complex(1,2);
py.cmath.polar(z)
ans = 
  Python tuple with values:

    (2.23606797749979, 1.1071487177940904)

int8
uint8
int16
uint16
int32
uint32
int64
uint64

int

MATLAB での Python 数値変数の使用

NaN

float("nan")

n = NaN;
py.float(n)
ans = 

  Python float with properties:

    imag: 0
    real: NaN

    nan

Inf

float("inf")

i = Inf;
py.float(i)
ans = 

  Python float with properties:

    imag: 0
    real: Inf

    inf

string スカラー
char ベクトル

str

MATLAB での Python str 変数の使用

string
string(missing)<missing>

str の "None" 値

s = string(missing);
py.str(s)
ans = 

  Python str with no properties.

    None

logical

bool

b = true;
py.type(b)
ans = 

  Python type with no properties.

    <class 'bool'>

dictionary
struct

dict

MATLAB での Python ディクショナリの使用

table
timetable

pandas.DataFrameMATLAB での Python pandas DataFrame の使用
datetime

datetime.datetime

MATLAB での Python datetime 型の使用
duration

datetime.timedelta

MATLAB での Python duration 型の使用

Python オブジェクト — py.type

type

-

Python 関数専用の関数ハンドル @py.module.function

module.function

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 あり)

double (実数)

numpy.array(dtype=np.float64)

single (実数)

numpy.array(dtype=np.float32)

int8 (実数)

numpy.array(dtype=np.int8)

uint8 (実数)

numpy.array(dtype=np.uint8)

int16 (実数)

numpy.array(dtype=np.int16)

uint16 (実数)

numpy.array(dtype=np.uint16)

int32 (実数)

numpy.array(dtype=np.int32)

uint32 (実数)

numpy.array(dtype=np.uint32)

int64 (実数)

numpy.array(dtype=np.int64)

uint64 (実数)

numpy.array(dtype=np.uint64)

double (複素数)

numpy.array(dtype=np.complex128)

single (複素数)

numpy.array(dtype=np.complex64)

logical

numpy.array(dtype=np.bool)

char ベクトル

str

cell ベクトル

tuple

1 行 N 列または M 行 1 列の string ベクトル

list

datetime 配列

numpy.datetime64 配列

duration 配列

numpy.timedelta64 配列

char 行列
cell 行列
MN 列の string 配列 (MN はともに 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 StringDType 配列

pystringarray

サポートされていない MATLAB

以下の MATLAB 型は、Python ではサポートされていません。

  • スパース配列

  • 非スカラー struct 配列

  • categorical

  • containers.Map

  • MATLAB オブジェクト

  • 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 データ型
(スカラー値のみ)

float

double

complex

複素数の double

bool

logical

datetime

datetime

pandas.DataFramestr オブジェクト
dictstr オブジェクト

string

Python 型から MATLAB 型への明示的な変換

Python 関数が他の型のデータを返した場合、Python インターフェイスはデータを自動的に変換しません。以下の MATLAB 関数を使用して、Python データ型を MATLAB 型に明示的に変換できます。

MATLAB に表示される Python の戻り値の型またはプロトコル

MATLAB の変換関数

py.str

string
char

MATLAB での Python str 変数の使用

__str__ メソッドをもつオブジェクト

char

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'

py.int
py.long
py.float

double
single
int8
uint8
int16
uint16
int32
uint32
int64
uint64

MATLAB での Python 数値変数の使用
py.bool

logical
double
single
int8
uint8
int16
uint16
int32
uint32
int64
uint64

x = py.bool(true);
double(x)
ans =

     1

py.bytes

uint8

b = py.bytes("MATLAB",'utf-8');
uint8(b)
ans =

  1×6 uint8 row vector

   77   65   84   76   65   66

py.array.array
py.memoryview

double
single
int8
uint8
int16
uint16
int32
uint32
int64
uint64

MATLAB での Python 数値変数の使用

py.numpy.ndarray

double
single
int8
uint8
int16
uint16
int32
uint32
int64
uint64
string

Python ndarray から MATLAB 配列への変換

py.list
py.tuple

double
single
int8
uint8
int16
uint16
int32
uint32
int64
uint64
logical
string
cell

MATLAB での Python list 変数の使用
MATLAB での Python tuple 変数の使用

詳細については、list または tuple の要素の変換中のエラーを参照してください。

マッピング プロトコルを実装する py.dict およびその他のオブジェクト

dictionary
struct

MATLAB での Python ディクショナリの使用
py.pandas.DataFrame

table
timetable

MATLAB での Python pandas DataFrame の使用

py.datetime.datetime
py.numpy.datetime64

datetime

MATLAB での Python datetime 型の使用

py.datetime.timedelta
py.numpy.timedelta64

duration

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, Superclasses

Python モジュールが __doc__ 属性でコンテンツを提供する場合、MATLAB はその情報にリンクします。

参考

トピック