2013-12-09 73 views
0

我有一個叫做時間的1xn矩陣,我從csv文件導入。有沒有辦法通過遵循時間模式來擴展這個矩陣(以便每月的工作日數)?例如,如果我開始。在matlab中擴展時間元素的矩陣

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"' 
+0

那麼問題是什麼? –

回答

2
  1. 如果time是char矩陣:

    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" 
+0

哇!工作完美!是啊,這是一個單元格陣列:) –

+0

@JoeDanger很高興它的工作。請注意,就你而言,由於所有字符串的寬度都相同,因此可以使用矩陣而不是單元陣列。它在內存方面效率更高,並且可能在時間方面更好 –

2

我假設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轉換回日期格式你的選擇。

+0

+1我不知道你在'datenum'中使用自定義格式。它簡化了很多事情 –

+1

我處理了太多使用奇怪和不自然的日期格式的{bleep}。 – nkjt