在matlab中扩展时间元素矩阵



我从csv文件中导入了一个名为时间的1xn矩阵。有没有办法通过遵循时间模式来扩展这个矩阵(这样每月的天数就可以工作了)?例如,如果我从开始。

time = 
    '"2013-05-01"'
    '"2013-05-02"'
    '"2013-05-03"'
    '"2013-05-04"'
    '"2013-05-05"'

不知何故,加上5个观测值,我的矩阵变成了:

time = 
    '"2013-05-01"'
    '"2013-05-02"'
    '"2013-05-03"'
    '"2013-05-04"'
    '"2013-05-05"'
    '"2013-05-06"'
    '"2013-05-07"'
    '"2013-05-08"'
    '"2013-05-09"'
    '"2013-05-10"'
  1. 如果time是字符矩阵:

    N = 5; %// how many dates to add
    lastdate = datenum(strrep(time(end,:),'"',''),29); %// last available date
    time = [time; [repmat('"',N,1) datestr(lastdate+(1:N),29) repmat('"',N,1)] ];
    
  2. 如果time是一个单元阵列,只需将最后一行替换为

    time = [time; mat2cell([repmat('"',N,1) datestr(lastdate+(1:N),29) repmat('"',N,1)],ones(1,N)) ];
    

这是通过读取最后一个字符串日期,用datenum转换为数字日期,生成N新的连续日期,然后用datestr转换回字符串来实现的。双引号单独处理。

示例:

>>time = ['"2013-05-04"'; '"2013-05-05"']
time =
"2013-05-04"
"2013-05-05"

给出

>> N = 5; %// how many dates to add
lastdate = datenum(strrep(time(end,:),'"',''),29); %// last available date
time = [time; [repmat('"',N,1) datestr(lastdate+(1:N),29) repmat('"',N,1)] ]
time =
"2013-05-04"
"2013-05-05"
"2013-05-06"
"2013-05-07"
"2013-05-08"
"2013-05-09"
"2013-05-10"

我假设time是一个单元格数组:

t = cell2mat(time);
n = 5;
t = datenum(t,'"yyyy-mm-dd"'); % using custom format
tdiff = t(end)-t(end-1); % assuming 
l = length(t);
newtime = zeros(l+n,1);
newtime(1:l)=t;
newtime(l+1:end) = (t(end)+tdiff):tdiff:(t(end)+tdiff*n);

您可以使用datestr将其转换回您选择的日期格式。

最新更新