2

我正在尝试对特定风暴和多个风暴中所有观测的飓风观测之间的连续小时数(变量“小时”)进行累积求和,以确定风暴的持续时间。这就是我所拥有的:

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 的小时数,所以我认为使用 accumarray 会起作用,但它没有。这是我尝试过的。

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

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

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

4

2 回答 2

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

然后您可以使用以下方式访问风暴 id = j 的持续时间

index = find(unique_storm_id == j);
duration{index}
于 2015-01-26T19:05:14.127 回答
0

尝试这个:

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

结果 ,cumdur是一个由连续(唯一)表示的cumsum结果的元胞数组。hrsstormid

于 2015-01-31T01:34:38.897 回答