当一个数组的元素大于一个值时,我如何计算最大的间隔?

11次浏览(过去30天)
大家好!
我有一个小问题。我有一个大数组,其中元素的值在0到20之间变化。我想确定这些值大于15的最大区间。例如,如果数组是[0 6 5 2 16 17 16 11 12 14 5 6 9 16 17 18 18 9],那么答案是4(16 17 18 18)。有什么好主意吗?

答案(6)

罗杰·斯塔福德
罗杰·斯塔福德 2013年9月16日
编辑:安德烈Bobrov 2013年9月16日
设A为行数组:
f = find(diff([false,A>15,false])~=0);
M = max(f(2:2:end)-f(1:2:end-1));
M是大于15的最长连续元素序列的长度。如果你想看到这个序列,可以这样做:
f = find(diff([false,A>15,false])~=0);
[m,p] = max(f(1:2:end)-f(1:2:end-1));
s = A(f(2*p):f(2*p)-1);
S是最长的序列。

图像分析
图像分析 2013年9月16日
如果你有图像处理工具箱,你可以简单地这样做:
M = [0 6 5 2 16 17 16 11 12 14 5 6 9 16 17 18 18 9]
M15 = m > 15
标记斑点
标签= bwlabel(m15);
测量长度为> 15
测量值= regionprops(标记为,“区域”);
allAreas =[测量值。区)
[sortedlength, labels] = sort([测量值。]区域),“下”
largestLabelIndex =标签(1)
留着那个吧
keep = ismember(标签,标签(1))
提取值
Out = m(keeper)

Azzi Abdelmalek
Azzi Abdelmalek 2013年9月16日
编辑:Azzi Abdelmalek 2013年9月16日
A =[0 6 5 2 16 17 16 11 12 14 5 6 9 16 17 18 18 16 17 18 19 20 16 17 9];
b = > 15;
Id = [0 diff(b) 0];
id1 =找到(id = = 1);
id2 =找到(id = = 1) 1;
k = 1:元素个数(id1)
d = (id1 (k): id2 (k));
C =[0 diff(d)>=0 0];
2 =找到(c = = 0);
ii1 = 2 (1: end-1);
ii2 = 2(2:结束)1;
[jj, jj] = max (ii2-ii1);
分离v {k} = d(故(jj): ii2 (jj));
结束
[idx, idx] = max (cellfun (@numel, v));
出v = {idx}

凯文Claytor
凯文Claytor 2013年9月16日
我们可以使用find和diff来查找序列;
Seq = [0 6 5 2 16 17 16 11 12 14 5 6 9 16 17 18 18 9]
脱粒= 15
Gt = find(seq>thresh)
Df = diff([0, gt])
现在我们有了一个看起来像一堆1的东西……我们可以用 以前的答案 求出这个序列的长度。
首先把它转换成1和0的格式
X = df;X (X >1) = 0
V = diff([0, x, 0]);
Len = findstr(v, -1) - findstr(v, 1);
如果你只想求最大值,很简单;Max (len)+1(我们在第一个diff中损失了一个)。如果你想要相应的索引…这可能比较棘手。我把这个留给你。

安德烈Bobrov
安德烈Bobrov 2013年9月16日
编辑:安德烈Bobrov 2013年9月16日
X = [0 6 5 2 16 17 16 11 12 14 5 6 9 16 17 18 18 9];
Xx = x(:) > 15;
T = cumsum([false;diff(xx) == 1]);
Z = accumarray(t(xx),find(xx),[],@(x){x});
[~,ii] = max(cellfun(“长度”, z));
Out = x(z{ii});

1月
1月 2013年9月16日
编辑:1月 2013年9月16日
X = [0 6 5 2 16 17 16 11 12 14 5 6 9 16 17 18 18 9];
[b, n, index] = RunLength(x > 15);
[maxN, maxPos] = max(n .* b);
结果= x(索引(maxPos) + (0:maxN - 1));
注:目前提交的是不完整的,明天会有更新的。RunLength_M正在工作,也包含在提交中。在FEX中还有更多的运行长度工具,例如: FEX:粗鲁

类别

了解更多环境和设置帮助中心而且文件交换

标签

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!