2015-06-01 33 views
0

我正在处理Matlab中长时间的时间序列,运行时间超过30-100年。我一直有意见开始看季节,大致接近于通过在该时间段内每年91天的部分(用一些tbd方法校正年的奇数天数)调用Matlab阵列元素组

基本上,我想要的是一个数组索引方法,它允许我创建一个新的数组,从元素1开始每365个元素需要91个元素。我一直在寻找一些正常的数组方法(一些(:)或其他),但我一直无法找到一个。我猜想另外一种方法就是在365天内重复91次,但这似乎是不必要的复杂。

有没有更简单的方法,我错过了? 在此先感谢您的帮助!

回答

0

所以,如果我理解正确,你想提取元素1-91,366-457,731-822,等等?我不知道,有一种方法与基本矩阵索引要做到这一点,但你可以做到以下几点:

days = 1:365; %Create array ranging from 1 - 365 
difference = length(data) - 365; %how much bigger is time series data? 
padded = padarray(days, [0, difference], 'circular'); %extend to fit time series 
extracted = data(padded <= 91); %get every element in the range 1-91 

基本上就是我做的是创建一个数组,其大小为您的时间序列相同一遍又一遍地重复1-365的数据。然后我上data执行逻辑索引,使得填充的阵列是小于或等于91

作为更亲切例子,考虑:

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
days = 1:5; 
difference = length(x) - 5; 
padded = padarray(days, [0, difference], 'circular'); 
extracted = x(padded <= 2); 

padded然后等于[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]extracted[1, 2, 6, 7]