matlab fra,将Matlab的datenum格式转换为Python

为了防止对其他人有用,下面是一个完整的示例,从Matlab mat文件加载时间序列数据,使用carlosdc的答案(定义为函数)将Matlab Datenum的向量转换为datetime对象的列表,然后使用Pandas绘制时间序列:from scipy.io import loadmat

import pandas as pd

import datetime as dt

import urllib

# In Matlab, I created this sample 20-day time series:

# t = datenum(2013,8,15,17,11,31) + [0:0.1:20];

# x = sin(t)

# y = cos(t)

# plot(t,x)

# datetick

# save sine.mat

urllib.urlretrieve('http://geoport.whoi.edu/data/sine.mat','sine.mat');

# If you don't use squeeze_me = True, then Pandas doesn't like

# the arrays in the dictionary, because they look like an arrays

# of 1-element arrays. squeeze_me=True fixes that.

mat_dict = loadmat('sine.mat',squeeze_me=True)

# make a new dictionary with just dependent variables we want

# (we handle the time variable separately, below)

my_dict = { k: mat_dict[k] for k in ['x','y']}

def matlab2datetime(matlab_datenum):

day = dt.datetime.fromordinal(int(matlab_datenum))

dayfrac = dt.timedelta(days=matlab_datenum%1) - dt.timedelta(days = 366)

return day + dayfrac

# convert Matlab variable "t" into list of python datetime objects

my_dict['date_time'] = [matlab2datetime(tval) for tval in mat_dict['t']]

# print df

DatetimeIndex: 201 entries, 2013-08-15 17:11:30.999997 to 2013-09-04 17:11:30.999997

Data columns (total 2 columns):

x 201 non-null values

y 201 non-null values

dtypes: float64(2)

# plot with Pandas

df = pd.DataFrame(my_dict)

df = df.set_index('date_time')

df.plot()

ab73527d3e29156e405647b52fc974aa.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值