2012-07-15 48 views
0

我試圖確定一個值是否在向量中順序重複N次。我面臨的挑戰是它可以在矢量內連續N次重複數次。目的是確定連續多少次某些值落在平均值之上。例如:MATLAB:確定一個值是否在一個向量中順序重複N次

>> return_deltas 

return_deltas = 

     7.49828129642663 
     11.5098198572327 
     15.1776644881294 
     11.256677995536 
     6.22315734182976 
     8.75582103474613 
     21.0488849115947 
     26.132605745393 
     27.0507649089989 
     ... 

(I只印幾個值例如但所述載體是大的。)

>> mean(return_deltas) 

ans = 

    10.50007490258002 

>> sum(return_deltas > mean(return_deltas)) 

ans = 

    50 

所以有一個值的50個實例中return_deltas比的return_deltas平均值大於。

我需要確定的次數,順序地,在return_deltas的值比在一排它的均值3倍。換句話說,如果return_deltas中的值連續大於其平均值3次,那就是一個實例。

例如:

--------------------------------------------------------------------- 
| `return_delta` value | mean  | greater or less | sequence | 
|-------------------------------------------------------------------- 
| 7.49828129642663 |10.500074902 | LT    | 1   | 
| 11.5098198572327 |10.500074902 | GT    | 1   | 
| 15.1776644881294 |10.500074902 | GT    | 2   | 
| 11.256677995536 |10.500074902 | GT    | 3 *  | 
| 6.22315734182976 |10.500074902 | LT    | 1   | 
| 8.75582103474613 |10.500074902 | LT    | 2   | 
| 21.0488849115947 |10.500074902 | GT    | 1   | 
| 26.132605745393 |10.500074902 | GT    | 2   | 
| 27.0507649089989 |10.500074902 | GT    | 3 *  | 
--------------------------------------------------------------------- 

星形表示3連續成功的序列。這個集合的結果將是兩個,因爲有兩次該值大於連續3次的平均值。

我在想什麼是創建一個新的載體:當然

>> a = return_deltas > mean(return_deltas) 

包含那些其中return_deltas值是大於平均值,並用它來找到多少次順序,在return_deltas值大於其連續3次的均值。我試圖用內置函數(如果有的話,我沒有發現它)或至少避免循環做到這一點。

有關我如何接近的想法?

回答

1

隨着一點點的工作,這個片斷髮現號的每一個運行的起始索引:

[0 find(diff(v) ~= 0)] + 1 

一個例子:

>> v = [3 3 3 4 4 4 1 2 9 9 9 9 9];   # vector of integers 
>> run_starts = [0 find(diff(v) ~= 0)] + 1 # may be better to diff(v) < EPSILON, for floating-point 

run_starts = 

    1  4  7  8  9 

要找到每個行程的長度

>> run_lengths = [diff(run_starts), length(v) - run_starts(end) + 1] 

這個變量便於查詢哪些運行超過了某個數字

>> find(run_lengths >= 4) 

ans = 

    5 

>> find(run_lengths >= 2) 

ans = 

    1  2  5 

這告訴我們,連續運行至少4個整數的唯一運行是#5。
但是,有三次運行至少是連續兩個整數,特別是運行#1,#2和#5。 您可以參考每個運行從run_starts變量開始的位置。

+0

這將適用於我的目的,謝謝! – 2012-07-15 19:56:36

相關問題