2015-06-01 51 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]