Main Content

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

参考

関連するトピック