循环的累积和matlab

时间:2015-01-26 18:32:51

标签: matlab cumsum accumarray

我试图在特定风暴中和多次风暴中的所有观测的飓风观测之间连续累计(变量' hrs')以确定风暴的持续时间。这就是我所拥有的:

stormid = [188, 188, 288, 288, 288, 388, 488, 488, 588...] %numbers represent a unique 
% code identifying a particular storm (i.e. 188= 1st storm of 1988)

hrs = [0,6,0,6,6,0,0,6,0...] %hours between observations in each storm
% where 0 indicates the start of a storm (this corresponds with the stormid above)

我的目标是总结每个风暴id的hrs,所以我认为使用accumarray会起作用,但事实并非如此。这是我试过的。

duration= accumarray(stormid, hrs, []); 

然后我也尝试了cumsum,但是当风暴ID相同时我无法弄清楚如何只使用cumsum。

如果有人有任何想法,我将不胜感激!谢谢。

2 个答案:

答案 0 :(得分:0)

这会有用吗?

编辑:我没有足够的评论点,所以我只是修改了建议的代码。 (假设错误发生是因为持续时间不足够宽,我是否正确?)

clear duration
unique_storm_id = unique(stormid);
duration = zeros(length(unique_storm_id),length(hrs));
for k = 1:length(unique_storm_id)
    duration{k} = cumsum(hrs(stormid == unique_storm_id));
end

然后您可以使用

访问storm id = j的持续时间
index = find(unique_storm_id == j);
duration{index}

答案 1 :(得分:0)

试试这个:

uni_id = unique(stormid);
cumdur = arrayfun(@(x) cumsum(hrs(stormid == x)), uni_id, 'uni', false);

结果cumdur是由cumsum结果应用于hrs的单元格数组,由连续(唯一)stormid表示。