将双倍分成几部分 - matlab
split a double into parts - matlab
我有一个形式为
的日期向量
20140117
20130325
20130530
等
双向量中有 5,000,000 行。
我怎样才能将它传输到 matlab 识别的 datevector?
我不喜欢把它改成字符串然后把零件分开放。时间太长了!
请帮忙!
fix
和 mod
的组合让我们提取您想要的数字:
%Matrix Columns YY,MM,DD,hh,mm,ss
[mod(fix(x/10000),100000),mod(fix(x/100),100),mod(x,100),zeros(size(x,1),3)]
%datenum
datenum(mod(fix(x/10000),10000),mod(fix(x/100),100),mod(x,100))
如果你真的想避免强制转换为字符串然后返回数字那么你可以使用这个方法:
D = [20140117; 20130325; 20130530];
YY = fix( D./10000 ) ;
MM = fix( (D-YY.*10000) /100 ) ;
DD = fix( (D-YY.*10000-MM.*100 ) );
DateInMatlabformat = datenum( YY , MM , DD ) ;
如果你愿意,你可以把它打包成一个衬里,但基本上它的作用是:
- 除以10000得到变量中的年份
YY
- 从原始日期 (
(D-YY.*10000)
) 中删除这部分,然后除以 100 得到月份。
- 去掉所有这些,你得到了这一天。
最后一行将所有这些合并为 Matlab 标准时间序列格式。阅读 datenum
and datestr
上的文档了解更多信息。
我有一个形式为
的日期向量20140117
20130325
20130530
等 双向量中有 5,000,000 行。 我怎样才能将它传输到 matlab 识别的 datevector?
我不喜欢把它改成字符串然后把零件分开放。时间太长了!
请帮忙!
fix
和 mod
的组合让我们提取您想要的数字:
%Matrix Columns YY,MM,DD,hh,mm,ss
[mod(fix(x/10000),100000),mod(fix(x/100),100),mod(x,100),zeros(size(x,1),3)]
%datenum
datenum(mod(fix(x/10000),10000),mod(fix(x/100),100),mod(x,100))
如果你真的想避免强制转换为字符串然后返回数字那么你可以使用这个方法:
D = [20140117; 20130325; 20130530];
YY = fix( D./10000 ) ;
MM = fix( (D-YY.*10000) /100 ) ;
DD = fix( (D-YY.*10000-MM.*100 ) );
DateInMatlabformat = datenum( YY , MM , DD ) ;
如果你愿意,你可以把它打包成一个衬里,但基本上它的作用是:
- 除以10000得到变量中的年份
YY
- 从原始日期 (
(D-YY.*10000)
) 中删除这部分,然后除以 100 得到月份。 - 去掉所有这些,你得到了这一天。
最后一行将所有这些合并为 Matlab 标准时间序列格式。阅读 datenum
and datestr
上的文档了解更多信息。