我需要帮助找到一种方法来做到这一点,尽管它看起来应该很简单。可以说我有一个nx1
数组。例如,让X=[1 1 1 .5 .4 .2 -.2 -.3 1 1 0 1]
. 我想做的是找到最大的连续系列1
开始的地方以及其中有多少1
。例如,使用X
,最大的连续系列从索引 1 开始,长度为 3。另外,我将使用非常大的数据集,所以我想尝试找到最有效和最快的方法完毕。
问问题
263 次
2 回答
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
于 2013-07-14T20:15:59.070 回答
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
于 2013-07-14T21:24:15.333 回答