Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 最大连续数列_Arrays_Matlab - Fatal编程技术网

Arrays 最大连续数列

Arrays 最大连续数列,arrays,matlab,Arrays,Matlab,我需要帮助找到一种方法来做到这一点,虽然它似乎应该是相当简单的。假设我有一个nx1数组。例如,让X=[11.5.4.2-.2-.3-.1-.0 1]。我想做的是找出最连续的1序列从哪里开始,以及其中有多少个1。例如,使用X,连续序列的最大序列从索引1开始,长度为3。此外,我将使用非常大的数据集,因此我想尝试找到最有效、最快速的方法。这里有一种方法可以相当有效地实现这一点: x = [1 1 1 0.5 0.4 0.2 -0.2 -0.3 1 1 0 1]; x1 = (x==1); d = di

我需要帮助找到一种方法来做到这一点,虽然它似乎应该是相当简单的。假设我有一个
nx1
数组。例如,让
X=[11.5.4.2-.2-.3-.1-.0 1]
。我想做的是找出最连续的
1
序列从哪里开始,以及其中有多少个
1
。例如,使用
X
,连续序列的最大序列从索引1开始,长度为3。此外,我将使用非常大的数据集,因此我想尝试找到最有效、最快速的方法。这里有一种方法可以相当有效地实现这一点:

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

这样的函数可能会有所帮助

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

我对代码进行了调整,使行和列向量输入都能工作。不,我只是通过一个列向量。然而,循环返回空矩阵,即使列中有连续的1。例如,什么向量?您确定这些值实际上是
==1
,并且没有被某个ε关闭吗?如果它们非常接近
1
,那么您应该能够在我上面的代码中调整
x1
的等式,以包含一个小公差。谢谢!通过将其调整为x>=0.9,可以实现这一点。非常感谢你的帮助。很高兴听到。更一般的解决方案是
x1=(abs(x-1)可能的