見出し画像

MATLABのdatetime型をPythonで扱えるようにする方法


MATLABのdatetime型

MATLABの型としてdatetime型がある。Pythonでdatetime型のデータがあるMATファイルを読み込んだ場合、そのままでは扱えない。
例えば、図1に示すようなdatetime型を持つMATファイルを作成する。

図1 datetime型の作成

これをPythonで読み込む。
読み込み方は、関連記事のPythonからMATLAB関数を使う方法で見たように、matlabengineライブラリを用いる。

import matlab.engine

# matlab関数を使用するためのmatlab engine起動
eng = matlab.engine.start_matlab()

# MATLABのload関数の呼び出し
data = eng.load("datedata.mat")

これを実行すると、dataには、MATファイルに保存された変数が読み込まれる。

{'date': <matlab.object object at 0x0000023D2F8E26D0>}

dataには、辞書型で結果が返ってくるので、変数dateにアクセスするには、

data['date']

とすれば良い。

結果

<matlab.object object at 0x00000271D13D26D0>

datetime型の場合は、結果に示したように中身のデータを取得できない。
図2に示すような配列の場合は、うまくいく。

図2 double型の配列

結果

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

datetime型を取得するには、文字列を経由するとよい。そこでMATLAB関数のstring関数で変換してから読み込む。

import matlab.engine

# matlab関数を使用するためのmatlab engine起動
eng = matlab.engine.start_matlab()

# MATLABのload関数の呼び出し
data = eng.load("datedata.mat")
convert_data = eng.string(data['date'])

結果

['2020/01/01', '2020/01/02', '2020/01/03', '2020/01/04', '2020/01/05', 
     '2020/01/06', '2020/01/07', '2020/01/08', '2020/01/09', '2020/01/10']

これにより、datetime型のデータが読み込まれていることが分かる。

公式ドキュメントではcell 配列にする方法を紹介している。

関連記事

PythonからMATLAB関数を使う方法
https://note.com/elemag/n/nb60d95bc4a9a?sub_rt=share_pw

サイト

https://sites.google.com/view/elemagscience/%E3%83%9B%E3%83%BC%E3%83%A0

この記事が気に入ったらサポートをしてみませんか?