1

私は時系列を持っています:

d = [transpose(floor(1+1/24:1/24:366)),1+(30-1).*rand(8760,1)];

最初の列は年間通算日を表し、2 番目の列はデータを表します。データは時間単位で測定されますが、ここでは測定日を表すために床が張られています。

データを異なるセルに分割したいと考えています。各セルには、データの開始時刻が異なる異なる日のデータが表示されます。たとえば、例から特定の日を 1 つ選択すると、次のようになります。

dat = d(d(:,1)==2,:);

そして、次のステートメントに従って、これを異なるセルに分割したいと思います。

Res = 1:11;
starti = arrayfun(@(x)dat(x:end,:),Res,'un',0);

これにより、同じシリーズが得られますが、開始点が異なります。次に、次の方法で値の範囲を見つけます。

rng = cellfun(@(x)range(x(:,2)),starti,'un',0);

シリーズ全体に対して同じ方法を実行するにはどうすればよいですか

dat = d;

ご協力いただきありがとうございます

4

1 に答える 1

2

forループを使用しないのはなぜですか?

R = d(1,1):d(end,1);
rng = cell(numel(R),1);
for ii = R

    dat = d(d(:,1)==ii,:)    

    Res = 1:11;
    starti = arrayfun(@(x)dat(x:end,:),Res,'un',0)

    if ~any(cellfun('isempty', starti))            
        rng{ii} = cellfun(@(x)range(x(:,2)),starti); end        
end
于 2012-11-29T11:08:48.550 に答える