【问题标题】:find the range for specific data from a time series从时间序列中找到特定数据的范围
【发布时间】:2012-11-29 10:50:33
【问题描述】:

我有一个时间序列:

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;

感谢您的帮助

【问题讨论】:

  • 只是备注,如果您可以将数据存储在矩阵而不是单元格中,您可能会让事情变得更容易。但当然,这是否可以管理在一定程度上取决于您的数据。

标签: matlab range


【解决方案1】:

为什么不直接使用 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

【讨论】:

    猜你喜欢
    • 2021-06-16
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多