Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

MATLAB から Python へのデータ型のマッピング

Python® 関数を呼び出す際、MATLAB® は MATLAB データを、Python 言語に対してデータを最も適切に表す型に変換します。

スカラー値を Python に渡す

MATLAB 入力引数の型 —
スカラー値のみ

結果の Python py.

double (実数)
single (実数)

float

MATLAB での Python 数値変数の使用

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

complex

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

    (2.23606797749979, 1.1071487177940904)

int8
uint8
int16
uint16
int32

int

 

uint32
int64
uint64

int
long (Version 2.7 のみ)

 

NaN

float("nan")

 

Inf

float("inf")

 

string スカラー
char ベクトル

str

MATLAB での Python str 変数の使用

string<missing>

None

py.list({string(missing),'Value'})
ans = 
  Python list with no properties.

    [None, 'Value']

logical

bool

 

構造体

dict

MATLAB での Python dict 変数の使用

Python オブジェクト — py.type

type

 

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

module.function

Python 関数 map への Python 関数の受け渡し

ベクトルを Python に渡す

MATLAB 入力引数の型 —
1N 列のベクトル

結果の Python 型

double (実数)

array.array('d')

single (実数)

array.array('f')

int8 (実数)

array.array('b')

uint8 (実数)

array.array('B')

int16 (実数)

array.array('h')

uint16 (実数)

array.array('H')

int32 (実数)

array.array('i')

uint32 (実数)

array.array('I')

int64 (実数) - Windows® での Python 2.7 のサポートなし

array.array('q')

uint64 (実数) - Windows での Python 2.7 のサポートなし

array.array('Q')

double (複素数)
single (複素数)
int8 (複素数)
uint8 (複素数)
int16 (複素数)
uint16 (複素数)
int32 (複素数)
uint32 (複素数)

memoryview

logical

memoryview

char ベクトル
string スカラー

str

127 より大きい値を含む char 配列 (Version 2.7 のみ)

unicode

cell ベクトル

tuple

行列と多次元配列を Python に渡す

Python 言語は MATLAB 配列に格納されたデータなど、メモリ バッファーにアクセスするためのプロトコルを提供します。MATLAB は、この Python バッファー プロトコルを MATLAB 配列に対して実装するため、データをコピーしなくても、MATLAB と同じプロセスで実行されている Python コードから MATLAB 配列を直接読み取ることができます。

多くの Python 関数は、ネイティブな Python 型に変換せずに、Python から MATLAB 配列を直接使用します。一部の関数では、numpy.ndarray などの特定の型が必要になる場合や、配列内のデータが変更される場合があります。これらの関数は MATLAB 配列を受け入れて、データを必要な型にコピーする場合があります。他の関数では、必要な型を渡さないとエラーを表示する場合もあります。これらの関数にデータを渡すには、まず、MATLAB データから必要な Python 型を作成して、それを Python 関数に渡します。この例では、numpy.array 型のデータ型を必要とする Python 関数に渡すための p 配列を作成します。

p = py.numpy.array(magic(3))
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.

MATLAB スパース配列は、Python ではサポートされていません。サポートされていない MATLAB 型を参照してください。

引数エラーのトラブルシューティング

Python 関数に numpy.ndarray など特定の Python 多次元配列型が必要である場合、MATLAB は、続行するためのヒントを含むメッセージを表示します。問題の原因が、行列または多次元配列を引数として渡すことである場合は、以下を実行します。

  1. Python 関数のドキュメントを確認し、想定される引数の型を調べる。

  2. MATLAB でその型の Python オブジェクトを作成し、それを Python 関数に渡す。

たとえば、次のコードがエラーを返すとします。

a = [1 2; 3 4];
py.pyfunc(a)

pyfunc のドキュメントで、想定される型が numpy.ndarray であると指定されている場合、次の変換を試します。

py.pyfunc(numpy.ndarray(a))

エラーが解決しない場合は、Python 例外の追加情報を確認して根本原因を特定します。

Python 型から MATLAB 型への自動変換

MATLAB は Python 関数から返された以下のデータ型を自動的に MATLAB 型に変換します。他の型を変換するには、Python 型から MATLAB 型への明示的な変換を参照してください。

Python に表示される Python の戻り値の型

結果の MATLAB の型 — スカラー

float

double

complex

複素数 double

int (Version 2.7 のみ)。

Python Vesion 3.x の int については、明示的に変換しなければなりません。Python 型から MATLAB 型への明示的な変換を参照してください。

int64

bool

logical

Python のその他すべての型 — type

Python オブジェクト — py.type

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

Python 関数の出力が、numpy.ndarray などの Python バッファー プロトコルを実装していて、それが数値または logical である場合、MATLAB によって以下が表示されます。

  • 実際の Python 型

  • 基となるデータ

  • 対応する MATLAB 変換関数。この関数を使用して、Python オブジェクトを MATLAB 配列に完全に変換します。

以下の MATLAB 関数を使用して、Python データ型を MATLAB 型に変換します。

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

MATLAB の変換関数

py.str (version 3.x)

string
char

MATLAB での Python str 変数の使用

py.str (version 2.7)

string
char
uint8

 

py.unicode

string
char

 

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

char

py.help('datetime.date.__str__')
Help on wrapper_descriptor in datetime.date:

datetime.date.__str__ = __str__(self, /)
    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
py.bool

数値関数:
double
single
int8
uint8
int16
uint16
int32
uint32
int64
uint64

 
logical

py.bytes

uint8

 

py.array.array
py.numpy.ndarray
py.memoryview

任意の形式の py.array.array および py.memoryview オブジェクトを、目的の MATLAB 型に変換できます。

数値関数:
double
single
int8
uint8
int16
uint16
int32
uint32
int64
uint64

MATLAB での Python 数値変数の使用。たとえば、Python の整数配列型を MATLAB で使用します。

py.listpy.tuple

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

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

詳細については、Error Converting Elements of list or tupleを参照してください。

マッピング プロトコル (例: py.dict)

struct

MATLAB での Python dict 変数の使用

たとえば、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.

次のように入力して、これを MATLAB 行列 P に変換できます。

P = double(p)
P = 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 はその情報にリンクします。

ディクショナリのキーとして Python オブジェクトを使用しない

Python オブジェクトを、MATLAB 関数 dictionary にキー引数として渡すことや、関数 keyMatch に入力として渡すことはできません。

サポートされていない MATLAB

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

  • 多次元の char または cell 配列

  • 構造体配列

  • スパース配列

  • categorical 型、
    table 型、
    containers.Map 型、
    datetime

  • MATLAB オブジェクト

  • meta.class (py.class)

関連するトピック