本帖最后由 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 条回复