メインコンテンツ

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

Python® dict を MATLAB® ディクショナリに変換し、MATLAB ディクショナリを Python dict に変換できます。Python コードで、MATLAB ディクショナリに対して dict メソッドを使用できます。

  • Python dict を MATLAB ディクショナリに変換するには、まずそれを matlab.dictionary コンストラクターに渡し、次に生成された matlab.dictionary オブジェクトを MATLAB に渡します。あるいは、Python ディクショナリを MATLAB に直接渡すことでも、Python ディクショナリを MATLAB 構造体に変換できます。

  • MATLAB ディクショナリを matlab.dictionary オブジェクトとして Python に渡すことができます。あるいは、Python で matlab.dictionary オブジェクトを直接作成することもできます。このオブジェクトは Python dict のように動作します。

Python ディクショナリから MATLAB のディクショナリまたは構造体への変換

Python dict を MATLAB ディクショナリに変換するには、それを Python matlab.dictionary 関数に渡し、結果の matlab.dictionary オブジェクトを MATLAB に渡します。(R2024b 以降)

たとえば、Python で Python dict から matlab.dictionary オブジェクトを作成します。次に、workspace を使用して、matlab.dictionary オブジェクトを MATLAB に渡します。この場合、MATLAB はキーを string に変換し、値を double に変換します。

import matlab.engine
eng = matlab.engine.start_matlab('-desktop')
 
pd = {'milk': 3.50, 'bread': 2.50, 'eggs': 2.75}
md = matlab.dictionary(pd)

eng.workspace['md'] = md

MATLAB でディクショナリを表示します。

md
md =

  dictionary (string ⟼ double) with 3 entries:

    "milk"  ⟼ 3.5000
    "bread" ⟼ 2.5000
    "eggs"  ⟼ 2.7500

MATLAB は、可能な限り、Python のキーと値を等価な MATLAB の型に変換します。Python ディクショナリのキーが MATLAB データ型への自動変換後、すべて同じデータ型でない場合、MATLAB はキーを cell 配列にラップします。Python ディクショナリの値についても同様です。

あるいは、workspace を使用して Python dict を MATLAB に直接渡すことで、Python dict を MATLAB 構造体に変換することもできます。この変換では、struct で説明されているように、Python ディクショナリのキーが有効な構造体フィールド名である必要があります。

 eng.workspace['pd'] = pd

MATLAB で構造体を表示します。

pd
pd = 

  struct with fields:

     milk: 3.5000
    bread: 2.5000
     eggs: 2.7500

マッピング プロトコルをサポートする Python オブジェクト タイプ (dict 以外) も MATLAB ディクショナリに変換できます。workspace を使用して、これらのオブジェクトを MATLAB に直接渡します。このようなオブジェクトは最初に matlab.dictionary オブジェクトに変換する必要はありません。たとえば、Python OrderedDict を MATLAB ディクショナリに変換します。

import collections
import matlab.engine
eng = matlab.engine.start_matlab('-desktop')
 
od = collections.OrderedDict({'soup': 3.57, 'bread': 2.29, 'bacon': 3.91, 'salad': 5.00})
eng.workspace['od'] = od

MATLAB により、Python OrderedDict が MATLAB ディクショナリに変換されます。MATLAB でディクショナリを表示します。

od
od =

  dictionary (string ⟼ double) with 4 entries:

    "soup"  ⟼ 3.5700
    "bread" ⟼ 2.2900
    "bacon" ⟼ 3.9100
    "salad" ⟼ 5

MATLAB ディクショナリから Python ディクショナリへの変換

MATLAB ディクショナリを Python に渡すと、MATLAB はディクショナリを matlab.dictionary オブジェクトとして渡します。Python ディクショナリのキーと値は、MATLAB と Python 間でのデータの受け渡しで説明されている MATLAB 型の既定の変換ルールによって決定されます。その後、dict コンストラクターを使用して、matlab.dictionary オブジェクトを Python dict に明示的に変換できます。

たとえば、MATLAB ディクショナリを作成し、それを Python dict に変換します。

まず、Python で MATLAB エンジンを起動します。

import matlab.engine
eng = matlab.engine.start_matlab('-desktop')

MATLAB で MATLAB ディクショナリを作成します。

dm = dictionary(["Avg Temp","Dew Point","Precipitation"],[71.12 69.07 0.0]);

MATLAB ディクショナリを Python に渡します。作成された matlab.dictionary オブジェクトを Python dict に変換します。

dm = eng.workspace['dm']
dp = dict(dm)

Python で dict を表示します。

dp
{'Avg Temp': 71.12, 'Dew Point': 69.07, 'Precipitation': 0.0}

MATLAB ディクショナリでの Python ディクショナリ メソッドの使用

Python コードで、matlab.dictionary オブジェクトに対して多くの Python dict メソッドを使用できます。

たとえば、len を使用して、matlab.dictionary オブジェクト dm の長さを出力します。

len(dm)
3

次の操作で matlab.dictionary オブジェクトがサポートされています。ここで、dm はディクショナリを表します。

  • list(dm)

  • len(dm)

  • dm[key]

  • dm[key] = value

  • del dm[key]

  • key in dm

  • key not in dm

  • iter(dm)

  • dm.clear()

  • dm.todict()

  • classmethod fromkeys(iterable, value=None)

  • dm.items()

  • dm.keys()

  • dm.values()

  • dm == dm2 (dm2matlab.dictionary オブジェクトの場合にのみサポートされます。dm2 に同じキーと値のペアが含まれている場合にのみ true が返されます)

matlab.dictionary オブジェクトの items() メソッド、keys() メソッドおよび values() メソッドではリストが返されます。この動作は、対応するメソッドがビュー オブジェクトを返す Python dict とは異なります。

参考

|

トピック