引言與示例:datenum日序轉(zhuǎn)月序
在處理數(shù)據(jù)時,我們經(jīng)常需要將逐日數(shù)據(jù)轉(zhuǎn)為逐月數(shù)據(jù),這就需要我們知道日序?qū)?yīng)的月序,比方說,我有2019年一整年的天數(shù)據(jù)共365個,我知道這個文件代表的是2018年的第幾天?那么我如何知道它是2018年的第幾個月呢?
如果直接上網(wǎng)搜索你會發(fā)現(xiàn)一個常見的思路:首先判斷是閏年還是非閏年,然后給出每個月都日期總數(shù),編寫函數(shù)來計(jì)算。
這方法當(dāng)然可行,但卻是基于C語言的一種操作,實(shí)際上,利用matlab的datenum函數(shù),我們只用一行代碼就能實(shí)現(xiàn)這個過程。
function mon= day2mon(year,daynum)
% year為年份,daynum為日序列
mon=month(datenum(year,1,0)+daynum);
end
比如說,我想知道2020年第234天是第幾個月,我們只要輸入:day2mon(2020,234)
即可。
利用正則表達(dá)式提取日期
當(dāng)然,這種方法有一個要求,即,逐日數(shù)據(jù)需要完整,文件命名按照日序排列。
這時候我們再用日序似乎就不再適用了,這時如果你的文件名如果包含了日期的話,可以構(gòu)造一個正則表達(dá)式提取。
比如說我這個文件:
2006年逐日海冰,本來應(yīng)當(dāng)有365天,卻只有364個數(shù)據(jù),不知道哪兒缺了,這時可以構(gòu)造正則表達(dá)式把月份從文件名里提出來。
文件名的命名規(guī)則:“POGOC_OUC_AMSR-E_DTASI_n_sic_YYYYMMDD.hdf”,命名相當(dāng)有規(guī)律,通過正則表達(dá)式可以很輕松地提取。
numstr=regexp(str,'\d{8}','match')
返回
然后將其轉(zhuǎn)換為數(shù)值型,再用datenum返回月序即可。
numdate=str2num(numstr{j}{1});
mon(j)=month(datenum(numdate))
具體應(yīng)用-15年海冰日數(shù)據(jù)轉(zhuǎn)月數(shù)據(jù)
下面我們來講講一下具體的運(yùn)用過程,
我們的目的是:將2005-2019年的海冰日數(shù)據(jù)轉(zhuǎn)為月數(shù)據(jù)。
首先定義一下年份:year=2005:2019
然后先批量讀個數(shù)據(jù)文件(hdf格式),為了避免過于復(fù)雜,我們先算一年的吧,這時,i=1,year(i)=2005。
先批量讀個文件:
files=dir([path,num2str(year(i)),'\*.hdf']);
fullname=cell(1,length(files));
seaice=cell(1,length(files));
filename=cell(1,length(files));
% 讀取逐日數(shù)據(jù)
for n=1:length(files)
fullname{n}=[path,num2str(year(i)),'\',files(n).name];
seaice{n}=hdfread(fullname{n},'OUC_SIC');
filename{n}=files(n).name;
end
然后用我們正則,提取出月序:
daynum=1:length(files);
numstr=regexp(filename,'\d{8}','match');
mon=zeros(1,length(numstr));
將提取的月序與索引一一對應(yīng),由于存在元胞數(shù)組里,先用cat函數(shù)拼接,再相加。文章來源:http://www.zghlxwxcb.cn/news/detail-421501.html
for m=1:12
d=seaice(mon==m);
monsic{12*(i-1)+m}=mean(cat(3,d{:}),3);
end
完成。文章來源地址http://www.zghlxwxcb.cn/news/detail-421501.html
到了這里,關(guān)于maltab datenum函數(shù)與正則表達(dá)式巧用:逐日數(shù)據(jù)轉(zhuǎn)為逐月數(shù)據(jù)、日序轉(zhuǎn)月序的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!