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)
より詳しい説明はここ