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