2016-07-07 18 views
0

タイムスタンプと複数の列変数を持つ行列があります。 マトリックスは1時間半の変数にまたがります。ここで行列平均的な類似期間MATLAB

11/11/2015 20:15 31.26410236 35.70104634 35.93171056 
11/11/2015 20:45 32.10746291 35.48806277 35.9647747 
. 
. 
. 
12/11/2015 20:15 32.10746291 35.48806277 35.9647747 
12/11/2015 20:45 32.10746291 35.48806277 35.9647747 
. 
. 
. 
13/11/2015 20:15 32.68310429 35.58753807 37.26447422 
13/11/2015 20:45 33.05141516 34.8432801 36.48033884 
. 
. 
. 
14/11/2015 20:15 32.08328579 34.66482668 34.65446868 
14/11/2015 20:45 32.19994433 34.40562145 34.34035989 

時間と分の点では同じ時間の平均を見つけるための最も簡単な方法は何であるの4つの列のサンプルはありますか? など。毎月20:45の各変数の平均値。

私は、datenumにタイムスタンプを変換datenumの小数部分を取って、datenumの小数部でデータをソートすることによって、これを達成できる知っています。その後、同様の小数点以下の行をブロックすることができます。datenumより効率的でよりエレガントな方法がありますか?あなたがミリ秒または秒のタイムスタンプに変換せずに、日付と時刻を直接操作することができますMATLABに

答えて

0

http://es.mathworks.com/help/matlab/date-and-time-operations-1.html

それとも簡単な方法は、日付ベクトルlike thisに日付を変換することです

[Y,M,D,H,MN,S] = datevec(___) 

>> A = datevec('13/11/2015 20:45','dd/mm/yyyy HH:MM') 

A = 

     2015   11   13   20   45   0 

>> B = datevec('14/11/2015 20:45','dd/mm/yyyy HH:MM') 

B = 

     2015   11   14   20   45   0 
DateVector = datevec(DateString,formatIn) 

、あなたがしたい列を比較しますこれで

は日付を比較するのは簡単です:

>> A - B 

ans = 

    0  0 -1  0  0  0 

まさに一日差

+0

感謝。これを使用してn日間の差異を持つ値の平均値をグループ化して検索するにはどうすればよいですか? – Buzz

0

これは私がこの問題を解決するためにやってenedものです:あなたの貢献のための

timestamp=linspace(datenum('2015-11-01 00:00', 'yyyy-mm-dd HH:MM'),datenum('2015-12-01 00:00', 'yyyy-mm-dd HH:MM'),1440); % 30 days 
timestamp=timestamp'; 
time_of_day=datetime(datevec(timestamp(1:48)),'Format','HH:mm'); 
numdays=30; 
data=rand(length(timestamp),2); 
means=NaN(48,3); 
for tt=1:48 
    means(tt,:)=[datenum(time_of_day(tt)) nanmean(data(tt:48:48*numdays,:),1)]; 
end 

    figure; 
    plot(time_of_day,means(:,2:3)); 
    xlim([timestamp(1) timestamp(48)]); 
関連する問題