Arrays 如何找到1';s在列表中[matlab]

Arrays 如何找到1';s在列表中[matlab],arrays,matlab,list,matrix,intervals,Arrays,Matlab,List,Matrix,Intervals,我需要找到矩阵中1的最长间隔,以及第一个“1”在该间隔中的位置 For example if i have a matrix: [1 0 0 1 1 1 0 0 0 0 1 1 1 1 1 1 1 ] A=round(rand(1,20)) %// test vector [~,p2]=find(diff([0 A])==1); %// finds where a string of 1's starts [~,p3]=find(diff([A 0])==-1); %// finds wher

我需要找到矩阵中1的最长间隔,以及第一个“1”在该间隔中的位置

For example if i have a matrix: [1 0 0 1 1 1 0 0 0 0 1 1 1 1 1 1 1 ]
A=round(rand(1,20)) %// test vector
[~,p2]=find(diff([0 A])==1); %// finds where a string of 1's starts
[~,p3]=find(diff([A 0])==-1); %// finds where a string of 1's ends
le=p3-p2+1; %// length of each interval of 1's
ML=max(le); %// length of longest interval
ML %// display ML
p2(le==ML) %// find where strings of maximum length begin (per Marcin's answer)
我需要有7的长度和第一个1的位置是11

如果您有任何关于如何进行的建议,我们将不胜感激。

作为基础,您可以执行以下操作:

a = [1 0 0 1 1 1 0 0 0 0 1 1 1 1 1 1 1 ]


dsig = diff([0 a 0]);
startIndex = find(dsig > 0);
endIndex = find(dsig < 0) - 1;
duration = endIndex-startIndex+1;
duration

startIdx = startIndex(duration == max(duration))
endIdx = endIndex(duration == max(duration))

请注意,这可能需要再次检查它是否适用于您的示例以外的其他情况。然而,我认为这是正确的方向。如果没有,您可以在链接的anwser中找到更多信息和可能性。

如果有多个相同长度的间隔,它将只给出第一个间隔的位置

For example if i have a matrix: [1 0 0 1 1 1 0 0 0 0 1 1 1 1 1 1 1 ]
A=round(rand(1,20)) %// test vector
[~,p2]=find(diff([0 A])==1); %// finds where a string of 1's starts
[~,p3]=find(diff([A 0])==-1); %// finds where a string of 1's ends
le=p3-p2+1; %// length of each interval of 1's
ML=max(le); %// length of longest interval
ML %// display ML
p2(le==ML) %// find where strings of maximum length begin (per Marcin's answer)

我想到了一种暴力手段

clc; clear all; close all;
A=  [1 0 0 1 1 1 0 0 0 0 1 1 1 1 1 1 1 ];
index = 1;
globalCount = 0;
count = 0;
flag = 0; %// A flag to keep if the previous encounter was 0 or 1 
for i = 1 : length(A)
    if A(i) == 1
        count = count + 1;
        if flag == 0 
            index = i
            flag = 1;
        end

    end
    if A(i) == 0 || i == length(A)
        if count > globalCount
            globalCount = count;
        end
        flag = 0;
        count = 0;
    end

end