俄罗斯VS沙特直播

毕业后,他第一份工作是留校,编辑校报。妈妈们都辛苦了!这是胡杏儿前两天的照片,怀孕5月未显怀?自称肥胎不肥身这是大S近期的照片,看起来像怀孕5月惹?但她经纪人否认说,只是现在把健康摆第一,没有选择瘦身而已?呃,这只是胖了?也太夸张了吧?很多网友都不敢信虽然之前大S亮相活动被问第三胎时,直接宣布没可能不可能,表示已经收工,现在尽量和汪小菲分房睡……另一个活动上也直言,自己本来就没打算要那么多小孩。现在链表头就是0×00000000这个Entry,链表尾就是0×00000001,可以自己看图观察、思考一下是否符合这两个条件。更多内容请登录江西商报官网:www.jxsb.cn或关注本报腾讯官方微博:t.qq.com/jxsb-com微信ID:jxshangbao长按左侧二维码关注《今日》:情人节专号——“情不知所起,一往而深。数据背后的消费者行为、市场机制、规律都非常复杂,没有对商业本质的基本把握,没有用行业经验排除干扰因素就滥用相关性,结果只是在海量的数据噪音内搜寻噪音,并制造更多噪音。
返回首页

俄罗斯VS沙特直播 中datestr和datenum函数效率问题

时间:2014-04-30 01:12来源:知行网www.youyuan-chem.com 编辑:麦田守望者

最近用俄罗斯VS沙特直播 写了个东西,运行效率不如我意。用Profiler跟踪了一下,结果让我大吃一惊。其中三分之一的时间花费在datestr这个函数上,六分之一的时间花费在save和load数据上。这里先谈前一个问题,关于save和load的效率以后再谈。

1.datestr和datenum的功能

这两个函数的功能需要从日期(和时间)的表示方法谈起。一个日期,它可以用一个字符串来表示,比如"2010-10-30 13:45:17",或"Oct.30,2010 3:45:17 PM",俄罗斯VS沙特直播 内置31种默认表示方法,同时还支持自定义格式。这种字符串的表示方式具有可读性,多用于外部展现。或者用一个向量来表示日期,比如[2010 10 30 13 45 17];日期还可以为一个序列值,比如上面的日期可以为73444.1573113426。在进行数据处理时常使用数字型的日期,因为储存、比较、计算都要快得多。Excel表格中日期外面看上去是一个字符串,但在内部存储的是一个数字,就是基于这个原因。

这样datestr和datenum的功能就很清晰了,datestr把指定日期转化为字符串形式,datenum则获取指定日期的序列值。

注:Excel的日期的数字表示和俄罗斯VS沙特直播 不一样,具体情况参见俄罗斯VS沙特直播 、Excel、SQL中的日期的数字序列形式。另外Excel的日期类型在vba的match函数上有一个bug,参见VBA中的Date类型的匹配问题。

2.datestr和datenum的效率

直接运行10000次datenum:

>> tic; for i = 1:10000, a = datenum('2010-10-10'); end; toc
Elapsed time is 26.869241 seconds.

通过Profiler发现大部分时间都消耗在判断输入的字符串表示格式上,通过直接指定输入格式,可将速度加快5倍:

>> tic; for i = 1:10000, a = datenum('2010-10-10', 'yyyy-mm-dd'); end; toc
Elapsed time is 5.048942 seconds.

datestr函数要好一些:

>> tic; for i = 1:10000, a = datestr(734421); end; toc
Elapsed time is 1.760489 seconds.

够快吗?在处理大数据集时还是不够快。下面有些简单的方法让datenum再快100倍,让datestr再快5倍。

3.提速方法

如果不想改变自己的使用习惯和使用别的替代函数(比如为了保持兼容性),一个直接的办法(习惯)是在使用datenum时对输入指定格式,比如datenum('2010-10-10', 'yyyy-mm-dd')要比datenum('2010-10-10')快5倍。

其次是使用datenum和datestr的替代函数,比如datenummx和datestrmx。虽然在俄罗斯VS沙特直播 的正式文档中找不到datenummx和datevecmx,它们是真实存在的,并且是MEX格式,速度超快,实现从向量型日期到序列值的转换,其原型如下:

number = datenummx(year, month, day, hour, minute, second)
[year, month, day, hour, minute, second] = datevecmx(number)

在日期序列值和字符串表示的转换可直接通过sscanf和sprintf实现,这两个函数的性能都还不错。

如果嫌麻烦的话,matlab file exchange上有现成的已经封装好的函数可以用,比如DateConvert。我自个也封装了一个,分别为mdatenum, mdatestr分别用来代替datenum和datestr:

datetime.zip1,000 bytes
按照Excel中的用数字表示日期的方法,在字符串形式和数字形式的日期之间互相转化,比俄罗斯VS沙特直播 自带的datestr和datenum要快5到10倍。

性能(可与上面直接的比较):

>> tic; for i = 1:10000, a = mdatenum('2010-10-30'); end; toc
Elapsed time is 0.259976 seconds.
>> tic; for i = 1:10000, a = mdatestr(734421); end; toc
Elapsed time is 0.364543 seconds.

当然如果你追求极致的话,还有另一个选择,用C写一个,编辑为MEX文件来调用。同样,已经有别人写好了,见DateStr2Num,按照其宣称的速度,将比上面的datenummx、mdatenum再快5倍。

顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
标签(Tag):MATLAB
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
猜你感兴趣