我刚刚开始从Matlab转到Python 2.7,但我在读取.mat文件方面遇到了一些问题。时间信息存储在Matlab的datenum格式中,对于那些不熟悉它的人:
序列日期号表示日历日期距离固定基准日期过去了多少天。在MATLAB中,序列日期号1表示公元0000年1月1日。
MATLAB还使用串行时间来表示从午夜开始的一天之分数;例如,下午6点等于0.75个串行天。因此,在MATLAB中,“2003年10月31日,下午6:00”的字符串是日期号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文件,因为有很多文件,而且我的同事也需要使用它们。
如果有帮助的话,其他人询问了相反的方式。不幸的是,我太新手了,无法真正理解那里正在发生什么。
/编辑(2012年11月1日):已在上面发布的教程中修复此问题。
matlab_datenum
输入到fromordinal
中之前,我会将其转换为int
。 - Blenderpython_datetime = datetime.fromordinal(int(matlab_datenum) - 366) + timedelta(days=matlab_datenum%1)
:) - Marco Sullatimedelta(days=int(matlab_datenum%1))
。否则我会得到:TypeError: unsupported type for timedelta days component: numpy.int32
。 - NMO