他の人が示唆しているように、文字列の日付をシリアルの日付番号に変換する必要があります。これにより、数値データの操作が容易になります。
間隔 (日、時間、分など) ごとのイベント数をカウントする効率的な方法は、HISTCやACCUMARRAYなどの関数を使用することです。このプロセスでは、シリアル日付をそのような関数で必要な単位/形式に操作する必要があります (たとえば、ACCUMARRAY には整数が必要ですが、HISTC には範囲を指定するためにビンのエッジを指定する必要があります)。
以下は、ACCUMARRAY を使用してイベント数をカウントするベクトル化されたソリューション (ループなし) です。これは非常に効率的な関数です (入力が大きい場合でも)。最初に、4 日間にわたって不等間隔に配置された 5000 個のタイムスタンプのサンプル データを生成します。あなたは明らかにそれをあなた自身のものに置き換えたいと思っています:
%# lets generate some random timestamp between two points (unevenly spaced)
%# 1000 timestamps over a period of 4 days
dStart = datenum('2000-01-01'); % inclusive
dEnd = datenum('2000-01-5'); % exclusive
t = sort(dStart + (dEnd-dStart).*rand(5000,1));
%#disp( datestr(t) )
%# shift values, by using dStart as reference point
dRange = (dEnd-dStart);
tt = t - dStart;
%# number of events by day/hour/minute
numEventsDays = accumarray(fix(tt)+1, 1, [dRange*1 1]);
numEventsHours = accumarray(fix(tt*24)+1, 1, [dRange*24 1]);
numEventsMinutes = accumarray(fix(tt*24*60)+1, 1, [dRange*24*60 1]);
%# corresponding datetime range/interval label
days = cellstr(datestr(dStart:1:dEnd-1));
hours = cellstr(datestr(dStart:1/24:dEnd-1/24));
minutes = cellstr(datestr(dStart:1/24/60:dEnd-1/24/60));
%# display results
[days num2cell(numEventsDays)]
[hours num2cell(numEventsHours)]
[minutes num2cell(numEventsMinutes)]
1 日あたりのイベント数の出力は次のとおりです。
'01-Jan-2000' [1271]
'02-Jan-2000' [1258]
'03-Jan-2000' [1243]
'04-Jan-2000' [1228]
1 時間あたりのイベント数の抜粋:
'02-Jan-2000 09:00:00' [50]
'02-Jan-2000 10:00:00' [54]
'02-Jan-2000 11:00:00' [53]
'02-Jan-2000 12:00:00' [74]
'02-Jan-2000 13:00:00' [49]
'02-Jan-2000 14:00:00' [59]
同様に数分間:
'03-Jan-2000 08:54:00' [1]
'03-Jan-2000 08:55:00' [1]
'03-Jan-2000 08:56:00' [1]
'03-Jan-2000 08:57:00' [0]
'03-Jan-2000 08:58:00' [0]
'03-Jan-2000 08:59:00' [0]
'03-Jan-2000 09:00:00' [1]
'03-Jan-2000 09:01:00' [2]