在matlab中从较长时间课程创建平均(事件记录)时间课程

时间:2014-09-30 14:12:22

标签: matlab time-series

我有一个向量(基本上是一个时间段)。

t=rand(1,20)'

我现在想要提取1到3,4或6,7到9的箱子的平均时间段。等等。

我可以使用平均值

逐步完成此操作
first=mean(t(1:3:end);
second=mean(t(2:3:end);
third=mean(t(3:3:end);

然后使用vertcat创建我的均值向量

mean_ts=vertcat(first,second,third);

这是一个简单任务的代码很多,而且我没有获得标准偏差等等。 有没有命令,可以更轻松地为我做这件事? 提前致谢!

2 个答案:

答案 0 :(得分:2)

您可以使用nan值扩展矢量,使其成为3的倍数

q = 3 - mod(numel(t),3);
t = [t; nan(q,1)];

然后重塑你的矢量,之后你可以按列计算平均值和stds:

k = reshape(t,3,numel(t)/3)';
mn = nanmean(k)
st = nanstd(k)

答案 1 :(得分:0)

您可以使用 arrayfun 作为单行 -

mean_ts = arrayfun(@(n) mean(t(n:3:numel(t))),1:3)

mean替换为std以获得标准偏差值。


或基于 reshape vec2mat 的其他单行 -

mean_ts = nanmean(reshape(vec2mat(t,3*ceil(numel(t)/3),nan),3,[]),2)

nanmean替换为nanstd以获得标准偏差值。