Python での MATLAB duration
型の使用
以下の例では、MATLAB® で MATLAB duration
値と Python® timedelta
値または NumPy timedelta64
値間の変換を行う方法を示します。
Python 関数への MATLAB duration
スカラーの受け渡し
MATLAB duration
オブジェクトを渡すと、インターフェイスで Python timedelta
オブジェクトに変換されます。たとえば、スカラーの MATLAB duration
オブジェクトを作成します。この値はマイクロ秒を含めるのに十分な精度をもっています。
mwd = duration("01:02:34.56789",... "Format","hh:mm:ss.SSSSS")
mwd = duration 01:02:34.56789
次に、list
コンストラクターなど、Python 関数への引数としてそれを渡します。MATLAB duration
オブジェクトを Python 関数への引数として渡すと、インターフェイスで Python timedelta
オブジェクトに変換されます。
pyListOfTimedelta = py.list({mwd})
pyListOfTimedelta = Python list with values: [datetime.timedelta(seconds=3754, microseconds=567890)]
Python 関数から返された Python duration
スカラーの処理
Python 関数から timedelta
オブジェクトが返されたら、関数 duration
を呼び出して MATLAB duration
オブジェクトに変換します。変換された duration
オブジェクトは常に既定の書式になります。書式を変更するには、その Format
プロパティを設定します。この例では、マイクロ秒を表示するように書式を設定します。
mwdConverted = duration(pyListOfTimedelta{1});
mwdConverted.Format = "hh:mm:ss.SSSSS"
mwdConverted = duration 01:02:34.56789
timedelta
配列の受け渡し
MATLAB duration
配列を Python timedelta
値のリストとして保存するには、まず cell 配列に変換します。
mwd = duration(1:2,2,34); mwd = num2cell(mwd)
mwd = 1×2 cell array {[01:02:34]} {[02:02:34]}
次に、cell 配列を Python 関数への引数として渡します。インターフェイスにより、cell 配列が Python timedelta
値のリストに変換されます。
py.print(mwd)
(datetime.timedelta(seconds=3754), datetime.timedelta(seconds=7354))
NumPy duration
配列の受け渡し
MATLAB duration
配列と NumPy timedelta64
配列間で変換できます。たとえば、MATLAB duration
配列を作成します。
mwd = duration(1:2,2,34)
mwd = 1×2 duration array 01:02:34 02:02:34
NumPy がインストールされている場合、インターフェイスによって配列が NumPy timedelta64
配列に変換されます。
py.print(mwd)
[[3754000000 7354000000]]
py.print(py.type(mwd))
<class 'numpy.ndarray'>
NumPy timedelta64
配列を MATLAB duration
配列に変換するには、関数 duration
を使用します。
pyTimedeltas = py.numpy.array(mwd)
pyTimedeltas = Python ndarray with properties: T: [1×1 py.numpy.ndarray] base: [1×1 py.NoneType] ctypes: [1×1 py.numpy.core._internal._ctypes] dtype: [1×1 py.numpy.dtype[timedelta64]] flags: [1×1 py.numpy.core.multiarray.flagsobj] flat: [1×1 py.numpy.flatiter] imag: [1×1 py.numpy.ndarray] itemsize: [1×1 py.int] nbytes: [1×1 py.int] ndim: [1×1 py.int] real: [1×1 py.numpy.ndarray] shape: [1×2 py.tuple] size: [1×1 py.int] strides: [1×2 py.tuple] [[3754000000 7354000000]]
mwdConverted = duration(pyTimedeltas)
mwdConverted = 1×2 duration array 01:02:34 02:02:34
Python 関数から返された複数の Python timedelta
オブジェクトの処理
Python 関数は、複数の timedelta
オブジェクトを Python timedelta
オブジェクトのリストまたはタプルとして返すことがあります。MATLAB 関数 duration
を使用して、リストまたはタプルを MATLAB duration
配列に変換します。リストまたはタプルには、Python datetime.timedelta
型のみが含まれている必要があります。
関数がリスト ptdList
を返すとします。この例のために、次のコードで ptdList
を作成します。
td1 = py.datetime.timedelta(hours=25, seconds=2); td2 = py.datetime.timedelta(days=50, hours=21, seconds=22); ptdList = py.list({td1, td2})
ptdList = Python list with values: [datetime.timedelta(days=1, seconds=3602), datetime.timedelta(days=50, seconds=75622)] Use string, double, duration or cell function to convert to a MATLAB array.
timedelta
オブジェクト間の経過時間を計算します。
mwtdList = duration(ptdList); D = mwtdList(1) + mwtdList(2)
D = 1246:00:24