Main Content

MATLAB での Python list 変数の使用

この例では、MATLAB® で Python® の list 変数を使用する方法を説明します。

list 入力引数を取る Python 関数を呼び出すには、変数 py.list を作成します。リストを MATLAB 変数に変換するには、関数 cell を呼び出し、その後リスト内の要素ごとに適切な変換関数を呼び出します。

list 入力引数を取る Python 関数の呼び出し

Python 関数 len は、コンテナー内のアイテムの数を返しますが、これには list オブジェクトも含まれます。

py.help('len')
Help on built-in function len in module builtins:

len(obj, /)
    Return the number of items in a container.

os.listdir を呼び出して、P という名前をもつ、プログラムの Python list を作成します。

P = py.os.listdir("C:\Program Files\MATLAB");
class(P)
ans = 
'py.list'

プログラムの数を表示します。

py.len(P)
ans = 
  Python int with properties:

    denominator: [1×1 py.int]
           imag: [1×1 py.int]
      numerator: [1×1 py.int]
           real: [1×1 py.int]

    9

1 つの要素を表示します。

P{2}
ans = 
  Python str with no properties.

    R2016b

Python リストへのインデックス付け

MATLAB のインデックスを使用して、リストの要素を表示します。たとえば、list の最後の要素を表示します。MATLAB は Python list を返します。

P(end)
ans = 
  Python list with no properties.

    ['R2021a']

また、for ループでリストを反復処理することもできます。

for n = P
    disp(n{1})
end
  Python str with no properties.

    R2014b

  Python str with no properties.

    R2016b

  Python str with no properties.

    R2017b

  Python str with no properties.

    R2018b

  Python str with no properties.

    R2019a

  Python str with no properties.

    R2019b

  Python str with no properties.

    R2020a

  Python str with no properties.

    R2020b

  Python str with no properties.

    R2021a

Python の list 型から MATLAB 型への変換

次のコードは、list P にある名前を、MATLAB 変数を使用して表示します。cell を呼び出して、リストを変換します。このリストは Python 文字列で構成されているため、関数 char を呼び出して cell 配列の要素を変換します。

cP = cell(P);

各 cell 要素名は Python 文字列です。

class(cP{1})
ans = 
'py.str'

Python 文字列を MATLAB データに変換します。

mlP = string(cell(P));

名前を表示します。

for n = 1:numel(cP)
    disp(mlP{n})
end
R2014b
R2016b
R2017b
R2018b
R2019a
R2019b
R2020a
R2020b
R2021a

MATLAB での数値型の Python リストの使用

Python list にはあらゆる型の要素が含まれており、型が混在している場合もあります。以下のコードで使用される MATLAB 関数 double では、Python list のすべての要素が数値であると仮定しています。

整数の list である P を返す Python 関数があるとします。このコードを実行するために、次の値をもつ変数を作成します。

P = py.list({int32(1), int32(2), int32(3), int32(4)})
P = 
  Python list with no properties.

    [1, 2, 3, 4]

値の数値型を表示します。

class(P{1})
ans = 
'py.int'

P を MATLAB cell 配列に変換します。

cP = cell(P);

cell 配列を double の MATLAB 配列に変換します。

A = cellfun(@double,cP)
A = 1×4

     1     2     3     4

入れ子にされた list 型の要素の読み取り

このコードは、list の要素を含む Python list 変数の要素にアクセスします。次の list があるとします。

matrix = py.list({{1, 2, 3, 4},{'hello','world'},{9, 10}});

インデックス (2,2) にある要素 'world' を表示します。

disp(char(matrix{2}{2}))
world

ステップ指定した Python 要素範囲の表示

スライスを使用して Python オブジェクトの要素にアクセスする場合、Python での形式は start:stop:step となります。MATLAB での構文形式は start:step:stop です。

li = py.list({'a','bc',1,2,'def'});
li(1:2:end)
ans = 
  Python list with no properties.

    ['a', 1.0, 'def']