Main Content

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

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

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

スカラー値を Python に渡す

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

結果の Python py.

double
single

float

MATLAB での Python 数値変数の使用

複素数 single
複素数 double

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')

logical

memoryview

char ベクトル
string スカラー

str

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

unicode

cell ベクトル

tuple

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

実数または logical 配列を Python 関数に渡す場合、MATLAB はデータを Python memoryview オブジェクトに自動的に変換します。Python 関数の出力が、Python バッファー プロトコルを実装していて、実数または logical である場合、MATLAB によって以下が表示されます。

  • 実際の Python 型

  • 基となるデータ

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

たとえば、次の値をもつ pyType 型の変数を返すモジュール pyModule の Python 関数を呼び出すとします。

p = 
  Python pyType:

     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 行列 P に変換するには、以下を入力します。

P = double(p)
P = 3×3    
     8     1     6
     3     5     7
     4     9     2

p の Python プロパティに関する特定の情報が必要な場合は、次のように入力します。

details(p)
  py.pyModule.pyType handle with properties:

           T: [1×1 py.pyModule.pyType]
        base: [1×1 py.NoneType]
      ctypes: [1×1 py.pyModule.core._internal._ctypes]
        data: [1×3 py.memoryview]
       dtype: [1×1 py.pyModule.dtype]
       flags: [1×1 py.pyModule.flagsobj]
        flat: [1×1 py.pyModule.flatiter]
        imag: [1×1 py.pyModule.pyType]
    itemsize: [1×1 py.int]
      nbytes: [1×1 py.int]
        ndim: [1×1 py.int]
        real: [1×1 py.pyModule.pyType]
       shape: [1×2 py.tuple]
        size: [1×1 py.int]
     strides: [1×2 py.tuple]

  Methods, Events, Superclasses

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

Python memoryview オブジェクトを使用すると、Python は MATLAB データのコピーを作成せずに MATLAB データを読み取ることができます。memoryview オブジェクトとバッファー プロトコルの詳細については、これらの用語をhttps://www.python.org/doc/で検索します。

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

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

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

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

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

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

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

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

py.pyfunc(pyType(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 型への明示的な変換

以下の 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.bytes

uint8

 

py.int

double
または
int64

 

py.long

double
または
int64

 

py.array.array

任意の形式の py.array.array を、目的の MATLAB 型に変換できます。

numeric
double
single
int8
uint8
int16
uint16
int32
uint32
int64
uint64

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

シーケンス プロトコル (例: py.list および py.tuple)

cell

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

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

struct

MATLAB での Python dict 変数の使用

サポートされていない MATLAB

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

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

  • 構造体配列

  • 複素数のスカラー整数または配列

  • スパース配列

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

  • MATLAB オブジェクト

  • meta.class (py.class)

関連するトピック