2012-07-15 63 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

相关问题