1

我有一个时间序列:

d = [transpose(floor(1+1/24:1/24:366)),1+(30-1).*rand(8760,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 回答