Arrays Matlab中基于衰退的数据子集数组

Arrays Matlab中基于衰退的数据子集数组,arrays,matlab,Arrays,Matlab,我想根据衰退期对代表日期的序列号数组进行子集划分,这样我就可以计算这些时期的mean()。以下示例说明了这一点: DateArray = transpose((1:20000)+678420); RndData = normrnd(0.003,0.05,19999,1); CumData = cumprod([1;RndData+1]); Data = [DateArray CumData]; load Data_Recessions.mat %Native `Econometrics to

我想根据衰退期对代表日期的序列号数组进行子集划分,这样我就可以计算这些时期的
mean()
。以下示例说明了这一点:

DateArray = transpose((1:20000)+678420);
RndData = normrnd(0.003,0.05,19999,1);
CumData = cumprod([1;RndData+1]);

Data = [DateArray CumData];

load Data_Recessions.mat %Native `Econometrics toolbox` dataset
% This loads a 2 column double array of start dates in the first column and corresponding end dates in the second column.


plot(Data(:,1),Data(:,2))
set(gca(),'Yscale','log');
recessionplot()


因此,我想计算上面灰色条上的mean()。表示这些期间的日期在衰退数组中。如何最有效地执行此操作?

这将为您提供灰色和白色周期的平均值。它构建一个索引用作每个数据值的标签,然后应用于使用相同标签的所有值的平均值:

ind = sum(bsxfun(@ge, Data(:,1).', [0; reshape(Date_Recessions.',[],1)]),1)
result = accumarray(ind(:), Data(:,2), [], @mean);

假设你的衰退日期在一个叫做D的2列矩阵中

M = arrayfun(@(x)(mean(Data(find(Data(:,1)==D(x,1)):find(Data(:,1)==D(x,2)),2))), 1:size(D,1))
或者作为实际上可能更有效的for循环:

M = NaN(size(D,1),1);
for x = 1:size(D,1)
    first = find(Data(:,1)==D(x,1))
    last = find(Data(:,1)==D(x,2))
    M(x) = mean(Data(first:last, 2))
end

加载数据.mat
中可以得到什么?具体来说,您的数据是什么形式/形状/大小的?它是一个计量经济学工具箱数据集。它加载可变衰退。这是一个两列双数组,第一列为衰退开始日期,第二列为相应的结束日期。谢谢!我希望这么简单的任务(至少在我看来)会简单得多。我想念‘R’:)@Mace更简单??只是几行而已。。。但在你的计量经济学工具箱中,很可能有一个函数可以做到这一点,但我恐怕没有。还可以查看文件交换…我只是习惯了R,在那里我可以用一行简短的代码来完成。