我刚开始从Matlab迁移到Python 2.7,我在阅读我的.mat文件时遇到了一些麻烦.时间信息以Matlab的datenum格式存储.对于那些不熟悉它的人:
序列日期编号表示日历日期,作为自固定基准日期以来经过的天数.在MATLAB中,序列号1是1月1日0000.
MATLAB还使用连续时间来表示从午夜开始的几天的分数; 例如,下午6点等于0.75连续日.所以MATLAB中的字符串'31 -Oct-2003,6:00 PM'是日期号731885.75.
(取自Matlab文档)
我想将其转换为Pythons时间格式,我找到了本教程.简而言之,作者说明了这一点
如果你使用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
Run Code Online (Sandbox Code Playgroud)
虽然我可以将它们整理成日常数据,但实际上我需要输入精确的时间序列.有没有人有这个问题的解决方案?我想避免重新格式化我的.mat文件,因为它们有很多,我的同事也需要使用它们.
如果它有所帮助,其他人则要求反过来.可悲的是,我对Python太新了,无法真正理解那里发生的事情.
/ edit(2012-11-01):这已在上面发布的教程中修复.
我正在为Matlab组件构建一个接口层,该组件用于分析由我正在构建的单独.NET应用程序维护的数据.我正在尝试将.NET数据表序列化为数字数组,以传递给MATLAB组件(作为更通用的序列化例程的一部分).
到目前为止,我已经相当成功地传递了数值数据表,但是在尝试添加数据类型列时我遇到了麻烦DateTime.我到目前为止所做的是将值从填充DataTable到双数组中,因为MATLAB只关心双精度,然后直接转换为a MWNumericArray,它本质上是一个矩阵.
这是当前的代码;
else if (sourceType == typeof(DataTable))
{
DataTable dtSource = source as DataTable;
var rowIdentifiers = new string[dtSource.Rows.Count];
// I know this looks silly but we need the index of each item
// in the string array as the actual value in the array as well
for (int i = 0; i < dtSource.Rows.Count; i++)
{
rowIdentifiers[i] = i.ToString();
}
// convenience vars
int rowCount = dtSource.Rows.Count;
int colCount = dtSource.Columns.Count;
double[,] …Run Code Online (Sandbox Code Playgroud)