Main Content

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

Python での MATLAB 配列の作成

matlab Python® パッケージでは、MATLAB® 数値型の配列を Python 変数として表すための配列クラスが提供されています。また、データを Python から MATLAB に渡すにリストされている、他の MATLAB 型もサポートされています。

Python 変数としての MATLAB 配列

matlab Python パッケージ (matlab.doublematlab.int32 など) からコンストラクターを呼び出すことにより、Python セッション内で MATLAB 数値配列を作成することができます。コンストラクターの名前は、MATLAB 数値型を示します。Python から呼び出される MATLAB 関数に、入力引数として MATLAB 配列を渡すことができます。MATLAB 関数から出力引数として数値配列が返されると、この配列が Python に返されます。

数値を含むオプションの入力引数 initializer を使って、配列を初期化することができます。引数 initializer は、リストやタプルなどの Python シーケンス型でなければなりません。オプションの入力引数 size は、初期化される配列のサイズを設定します。多次元配列を作成するには、複数の数値シーケンスを含むように initializer を指定するか、size が多次元になるように指定します。オプションのキーワード引数 is_complexTrue に設定することで、複素数からなる MATLAB 配列を作成できます。mlarray モジュールは、次の表にリストされている MATLAB 配列コンストラクターを提供します。

matlab パッケージからのクラス

Python でのコンストラクターの呼び出し

MATLAB 数値型

matlab.double

matlab.double(
initializer=None,
size=None,
is_complex=False)

倍精度

matlab.single

matlab.single(
initializer=None,
size=None,
is_complex=False)

単精度

matlab.int8

matlab.int8(
initializer=None,
size=None,
is_complex=False)

8 ビット符号付き整数

matlab.int16

matlab.int16(
initializer=None,
size=None,
is_complex=False)

16 ビット符号付き整数

matlab.int32

matlab.int32(
initializer=None,
size=None,
is_complex=False)

32 ビット符号付き整数

matlab.int64a

matlab.int64(
initializer=None,
size=None,
is_complex=False)

64 ビット符号付き整数

matlab.uint8

matlab.uint8(
initializer=None,
size=None,
is_complex=False)

8 ビット符号なし整数

matlab.uint16

matlab.uint16(
initializer=None,
size=None,
is_complex=False)

16 ビット符号なし整数

matlab.uint32

matlab.uint32(
initializer=None,
size=None,
is_complex=False)

32 ビット符号なし整数

matlab.uint64b

matlab.uint64(
initializer=None,
size=None,
is_complex=False)

64 ビット符号なし整数

matlab.logical

matlab.logical(
initializer=None,
size=None)c

logical

a In Python on Windows, matlab.int64 is converted to int32 in MATLAB. Also, MATLAB cannot return an int64 array to Python.

b In Python on Windows, matlab.uint64 is converted to uint32 in MATLAB. Also, MATLAB cannot return a uint64 array to Python.

c Logicals cannot be made into an array of complex numbers.

N 個の要素をもつ配列を作成する場合、これは MATLAB 配列であるため、サイズは 1 行 N 列になります。

import matlab
A = matlab.int8([1,2,3,4,5])
print(A.size)

(1, 5)

初期化子は、5 個の数値を含む Python リストです。MATLAB 配列のサイズが 1 行 5 列であることが、(1,5) というタプルで示されています。

Python での MATLAB 配列の属性とメソッド

matlab パッケージ コンストラクターで作成されたすべての MATLAB 配列は、次の表に記載されている属性とメソッドをもちます。

属性またはメソッド

目的

size

タプルとして返される、配列のサイズ

reshape(size)

シーケンス size によって指定された配列の形状変更

Python での多次元 MATLAB 配列

Python では、任意の数値型の多次元 MATLAB 配列を作成することができます。Python の 2 つの浮動小数点リストを使用して、2 行 5 列の double の MATLAB 配列を作成します。

import matlab
A = matlab.double([[1,2,3,4,5], [6,7,8,9,10]])
print(A)

[[1.0,2.0,3.0,4.0,5.0],[6.0,7.0,8.0,9.0,10.0]]

Asize 属性は、これが 2 行 5 列の配列であることを示します。

print(A.size)

(2, 5)

Python での MATLAB 配列へのインデックス付け

Python のリストとタプルにインデックスを付けることができるのと同様に、MATLAB 配列にもインデックスを付けることができます。

import matlab
A = matlab.int8([1,2,3,4,5])
print(A[0])

[1,2,3,4,5]

MATLAB 配列のサイズは (1,5) であるため、A[0][1,2,3,4,5] になります。配列にインデックスを付けて 3 を取得します。

print(A[0][2])

3

Python のインデックスは 0 ベースです。Python セッションにおいて MATLAB 配列の要素にアクセスするときは、0 ベースのインデックスを使用します。

次の例は、多次元 MATLAB 配列にインデックスを付ける方法を示しています。

A = matlab.double([[1,2,3,4,5], [6,7,8,9,10]])
print(A[1][2])

8.0

Python での MATLAB 配列のスライス

Python のリストとタプルをスライスできるのと同様に、MATLAB 配列をスライスすることができます。

import matlab
A = matlab.int8([1,2,3,4,5])
print(A[0][1:4])

[2,3,4]

データをスライスに代入することができます。次の例は、Python リストから配列への代入を示しています。

A = matlab.double([[1,2,3,4],[5,6,7,8]])
A[0] = [10,20,30,40]
print(A)

[[10.0,20.0,30.0,40.0],[5.0,6.0,7.0,8.0]]

別の MATLAB 配列から、または数値を含む任意の Python イテラブルからデータを代入することができます。

次の例で示すように、スライスを指定して代入することができます。

A = matlab.int8([1,2,3,4,5,6,7,8])
A[0][2:4] = [30,40]
A[0][6:8] = [70,80]
print(A)

[[1,2,30,40,5,6,70,80]]

メモ

MATLAB 配列のスライスは、Python リストのスライスとは異なった動作をします。MATLAB 配列をスライスすると、シャロー コピーではなくビューが返されます。

同じ値で MATLAB 配列と Python リストを指定し、スライスを代入すると、結果は異なったものになります。

>>>mlarray = matlab.int32([[1,2],[3,4],[5,6]])
>>>py_list = [[1,2],[3,4],[5,6]]
>>>mlarray[0] = mlarray[0][::-1]
>>>py_list[0] = py_list[0][::-1]
>>>mlarray[0]
matlab.int32([[2,2],[3,4],[5,6]])
>>>py_list
[[2,1],[3,4],[5,6]]

Python での MATLAB 配列の形状変更

Python で reshape メソッドを使って MATLAB 配列の形状を変更することができます。入力引数 size は、配列の要素数を変更しないシーケンスでなければなりません。reshape を使用して 1 行 9 列の MATLAB 配列を 3 行 3 列に変更します。

import matlab
A = matlab.int8([1,2,3,4,5,6,7,8,9])
A.reshape((3,3))
print(A)

[[1,4,7],[2,5,8],[3,6,9]]

関連するトピック