[我分享] 在大数据下应避免使用str2double

[复制链接]
heawjc 发表于 2017-2-20 23:09:43
本帖最后由 heawjc 于 2017-3-7 11:19 编辑

在使用MATLAB时应尽可能的避免使用for,取而代之的是向量运算或矩阵运算,然而有些MATLAB自带的函数竟也使用了for,如str2double。

最近大量使用了和日期、字符串相关的函数,但在转换成数字型数据时发现性能非常不理想。

经测试,假设加载1990年4季度至2016年4季度之间,共1000只不同的证券,每条数据均有一个相应的日期值,类型为字符串,格式为yyyymmdd,加载进内存后定义变量date,为一大小为6399000个元素的cell类型的变量:

>> whos date
  Name            Size                Bytes  Class    Attributes

  date      6399000x1             819072000  cell               

若将其转为数字,我们想到了使用str2double:

>> tic,str2double(date);toc
Elapsed time is 251.319729 seconds.

运行时间为251秒。

查看源码,竟使用了for,故需对其进行优化,由于每个元素均有固定的格式,为yyyymmdd的日期格式,故可作如下优化:

>> tic,(char(date)-48)*[1e7;1e6;1e5;1e4;1e3;1e2;1e1;1e0];toc
Elapsed time is 1.667178 seconds.

发现优化后运行时间为2秒不到。

可见MATLAB中向量运算的性能是非常高的。


1 条回复


逻辑哈 发表于 2018-1-26 12:57:17
非常大公无私的精神值得学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表