MATLAB での Python 数値変数の使用
この例では、MATLAB® で Python® の数値型を使用する方法を説明します。
MATLAB での Python 数値型の使用
既定では、MATLAB での数値は倍精度型です。ただし、Python では、小数部のない数値は既定で整数型です。数値入力引数を取る Python 関数を呼び出す際の変換エラーを解決するために、MATLAB は、Python 言語に対しデータを最も適切に表す型に double
値を変換します。
たとえば、Python の math
モジュールの三角関数を呼び出すには、MATLAB の double
値を渡します。
pynum = py.math.radians(90)
pynum = 1.5708
Python の float
型を返す関数では、MATLAB は自動的に型を double
に変換します。
class(pynum)
ans = 'double'
Python の int
型を返す関数では、MATLAB は自動的に型を int
に変換します。たとえば、関数 bit_length
は、整数を 2 進数で表すために必要なビット数を int
値として返します。
py.int(intmax).bit_length
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] 31
MATLAB は、引数を Python 関数に渡す前に MATLAB double
値を Python int
に変換するときにも Python 型ヒントを使用します。"(R2024b 以降)"
たとえば、Python date
コンストラクターでは整数の入力が必要です。MATLAB 数値を datetime
モジュールの Python date
コンストラクターに渡すと、MATLAB はまず double
値を整数に変換します。
d = py.datetime.date(2014,12,31)
d = Python date with properties: day: [1×1 py.int] month: [1×1 py.int] year: [1×1 py.int] 2014-12-31
型ヒント情報を提供するユーザー作成関数では、double
から int
への変換もサポートされています。ただし、MATLAB での型ヒント情報の使用は制限されています。たとえば、Python typing
モジュールなどのモジュールはサポートされていません。MATLAB では、スタブ モジュールまたはスタブを含むモジュールからの型ヒントもサポートされていません。さらに、MATLAB は桁落ちが生じない場合にのみ double
を int
に変換します。
数値の iterable
引数を指定した Python メソッドの呼び出し
Python 関数 math.fsum
は、iterable
入力引数の浮動小数点値を合計します。MATLAB ベクトルをこの関数に渡すことができます。たとえば、MATLAB の patients.mat
データ ファイルを開き、数値配列 Height
を読み取ります。
load patients.mat
class(Height)
ans = 'double'
size(Height)
ans = 1×2
100 1
この引数を Python に渡す場合、MATLAB は数値を自動的に Python 数値に変換し、Python はベクトル値を反復処理します。
py.math.fsum(Height)
ans = 6707
MATLAB での Python array
型の使用
次のような double 型の Python array.array
を返す Python 関数があるとします。
P = py.array.array('d', 1:5)
P = Python array: 1 2 3 4 5 Use details function to view the properties of the Python object. Use double function to convert to a MATLAB array.
P
を MATLAB 関数 sum
に渡すには、P
を double
型の MATLAB 配列に変換します。
sum(double(P))
ans = 15
MATLAB での Python 整数 array
型の使用
次の Python 配列があるとします。Python 関数 reverse
をこの配列に対して呼び出し、その結果を MATLAB 配列に変換します。
arr = py.array.array('i',[int32(5),int32(1),int32(-5)])
arr = Python array: 5 1 -5 Use details function to view the properties of the Python object. Use int32 function to convert to a MATLAB array.
arr.reverse A = int32(arr)
A = 1×3 int32 row vector
-5 1 5
数値を表示する際にプロパティを確認する理由
MATLAB はすべての Python 型をオブジェクトとして表示しますが、これにはオブジェクト プロパティのリストも含まれます。数値型の場合、MATLAB では、予想される出力値を最後の行に表示します。
py.int(5)
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] 5