最大连续数系列

时间:2013-07-14 19:41:14

标签: arrays matlab

我需要帮助找到一种方法来做到这一点,虽然看起来应该很简单。假设我有一个nx1数组。例如,让X=[1 1 1 .5 .4 .2 -.2 -.3 1 1 0 1]。我想要做的是找到连续1的最大系列开始的位置以及其中有多少1个。例如,使用X,最大系列的连续系列从索引1开始,长度为3.另外,我将使用非常大的数据集,所以我想尝试找到最有效的这是最快的方法。

2 个答案:

答案 0 :(得分:2)

这是一种可以相当有效地完成这项工作的方法:

x = [1 1 1 0.5 0.4 0.2 -0.2 -0.3 1 1 0 1];
x1 = (x==1);
d = diff(x1(:).');
start = find([x1(1) d]==1)
len = find([d -x1(end)]==-1)-start+1

返回

start =

     1     9    12

len =

     3     2     1

答案 1 :(得分:0)

这样的功能可以提供帮助

function [start, len] = findLongestRunning(x)
y = find(diff([0;x(:)==1;0]));
[len,J] = max(y(2:2:end)-y(1:2:end));
start = y(2*J(1)-1);
end

运行您的示例

>> [start, len] = findLongestRunning(x)
start =
     1
len =
     3

请注意,如果有多个序列符合要求,则代码将返回第一个出现的代码:

>> [start, len] = findLongestRunning([x 0 x])
start =
     1
len =
     3