Matlabのdatenum形式をPythonに変換する質問する

Matlabのdatenum形式をPythonに変換する質問する

Matlab から Python 2.7 に移行し始めたばかりですが、.mat ファイルの読み取りに問題があります。時間情報は Matlab の datenum 形式で保存されます。これに慣れていない人のために:

シリアル日付番号は、固定された基準日から経過した日数としてカレンダーの日付を表します。MATLAB では、シリアル日付番号 1 は 0000 年 1 月 1 日です。

MATLAB では、深夜 0 時から始まる日数を表すためにシリアル時間も使用します。たとえば、午後 6 時はシリアル日数 0.75 に相当します。したがって、MATLAB の文字列「31-Oct-2003, 6:00 PM」は日付番号 731885.75 になります。

(Matlab ドキュメントより抜粋)

これをPythonの時間形式に変換したいのですが、このチュートリアル要するに、著者は次のように述べている。

これを Python を使用して解析するとdatetime.fromordinal(731965.04835648148)、結果は妥当なものになるかもしれません [...]

(それ以上の変換を行う前に)、datetime.fromordinal は整数を期待しているので、これは機能しません。

>>> datetime.fromordinal(731965.04835648148) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: integer argument expected, got float

日次データの場合は切り捨てるだけで済みますが、実際には分単位の時系列をインポートする必要があります。この問題の解決策を知っている人はいますか? .mat ファイルの数が多く、同僚もそれらを扱う必要があるため、再フォーマットは避けたいです。

もしお役に立てれば、他の人は逆のことを要求した残念ながら、私は Python を使い始めたばかりなので、そこで何が起こっているのかを本当に理解できません。

/編集 (2012-11-01): これは、上記に投稿されたチュートリアルで修正されました。

ベストアンサー1

解決策へのリンクですが、小さな問題があります。それは次の通りです:

from datetime import datetime, timedelta
python_datetime = datetime.fromordinal(int(matlab_datenum)) + timedelta(days=matlab_datenum%1) - timedelta(days = 366)

より詳しい説明はここ

おすすめ記事